Sao bạn phải tách ra 2 form request nhỉ? Nó chỉ dùng cho 1 action thôi mà.
Cơ mà vẫn có cách. Cơ chế của FormRequest là:
- Laravel tự động resolve (khởi tạo đối tượng) từ container dựa vào type hint trong method
- Sau khi resolve nó thực hiện validate request luôn.
Bạn xem code của họ sẽ rõ:
Files: config/app.php => provider Illuminate\Foundation\Providers\FoundationServiceProvider => Illuminate\Foundation\Providers\FormRequestServiceProvider
Cách 1:
Hint cả 2 cái FormRequest vào function store, laravel tự động resolve và validate:
public function store(
StoreContact $storeContactRequest,
StoreReservation $storeReservationRequest
) {
$this->_storeContact($storeContactRequest);
$this->_storeReservation($storeReservationRequest);
...
}
private function _storeContact($request) {...}
private function _storeReservation($request) {...}
Cách 2:
Resolve 2 cái form request đó từ container, dùng helper resolve() hoặc app()
public function store(Request $request) {
app(StoreContact::class);
app(StoreReservation::class);
$this->_storeContact($request);
$this->_storeReservation($request);
...
}
private function _storeContact($request) {...}
private function _storeReservation($request) {...}
Nếu muốn rõ ràng hơn thì viết thế này:
public function store(Request $request) {
$storeContactRequest = app(StoreContact::class);
$toreReservationRequest = app(StoreReservation::class);
$this->_storeContact($storeContactRequest);
$this->_storeReservation($toreReservationRequest);
...
}
private function _storeContact(StoreContact $request) {...}
private function _storeReservation(StoreReservation $request) {...}