I have a doubt about the FormRequest Class (I think it apply at other classes).
I have a class which has a method init(). This method receive a VehicleRequest. I'm going to share a simplified version of the code:
public function init(VehicleRequest $request){
if($request->input('type' == 'car'){
$vehicle = new Car($request);
} else {
$vehicle = new MotorCycle($request);
}
}
The class Car:
class Car{
public function __construct(VehicleRequest $request){
...
}
}
The request I send (in car case) looks like:
{
"type": car,
"wheels": 4,
"brand": bmw
}
Now, in this example a Car class is initialized with the VehicleRequest. But I need to do another checks in addition to those made by VehicleRequest. For example, I need to check if the wheels are 4, the brand is in a set I define...
So, how can I do the Car class wait as parameter a CarRequest?
For example instead a VehicleRequest? Example:
class Car{
public function __construct(CarRequest $request){
...
}
}
I hope you undestand my doubt, thanks!
CodePudding user response:
Use the service container here:
enter the following in the AppServiceProvider
public function register ()
{
$type = app(Request::class)->get('type')
if($type == 'car') {
$this->app->bind(VehicleRequestInterface::class, CarRequest::class)
} else {
$this->app->bind(VehicleRequestInterface::class, VehicleRequest::class)
}
}
class Car {
public function __construct(VehicleRequestInterface $request){
...
}
}
class CarRequest extends FormRequest implements VehicleRequestInterface {
....
}
class VehicleRequest extends FormRequest implements VehicleRequestInterface {
....
}
// VehicleRequestInterface
interface VehicleRequestInterface
{
}