Привязка модели формы к вложенным маршрутам — не удается ИСПРАВИТЬ — возвращает MethodNotAllowedException для RouteCollection в строке 219

Я получаю ошибку MethodNotAllowedException всякий раз, когда пытаюсь отправить запрос PATCH на свой контроллер. Это происходит только на моем вложенном маршруте, все остальные маршруты, которые запускают запрос PATCH, отлично работают.

маршруты.php:

Route::resource('customers.aircraft','AircraftController');

моя форма:

Form::model($aircraft, ['method' => 'PATCH', 'class' => 'form-horizontal', 'action' => ['AircraftController@update', $aircraft->id]])

Каждый самолет принадлежит заказчику. Мой URL-адрес выглядит так:

example.com/customers/5/aircraft/6/edit

То, что я наблюдаю в адресной строке, когда получаю сообщение об ошибке, это:

example.com/customers/6/aircraft

Я определил, что это не может быть вызвано контроллером, потому что самая первая строка в моем методе @update — это dd($request);, и это не так далеко. Я предполагаю, что проблема в том, что маршрут не получает информацию, необходимую для направления моего запроса, он, очевидно, берет aircraft_id и использует его как customer_id, но я не могу понять, как и почему.

Я пробовал это:

Form::model($aircraft, ['method' => 'PATCH', 'class' => 'form-horizontal', 'action' => ['AircraftController@update', [$customer_id, $aircraft->id]]])

Думал, что нужно отправить customer_id, но это не сработало. Я новичок в Laravel, поэтому я ожидаю, что это просто недостаток знаний, однако пока ничего на веб-сайтах Stackoverflow, Laravel или Laracasts не помогло мне.


person Andrew Fox    schedule 16.04.2016    source источник


Ответы (1)


Попробуйте использовать метод Put():

Form::model($aircraft, ['method' => 'PUT', 'class' => 'form-horizontal', 'action' => ['AircraftController@update', $aircraft->id]])

для Route::resource URL-адрес метода обновления должен быть таким:

example.com/aircraft/6

public function update(AircraftRequest $request, $aircraft_id) 
{ 
   $data = $request->all();
   dd($data['registration']); 
   $request['registration'] = strtoupper($request['registration']); 
   $aircraft->findOrFail($aircraft_id)->update($request->all());
   return redirect()->action('AircraftController@show', $aircraft_id); 
 }

поэтому попробуйте отправить customer_id в скрытом вводе. Дайте мне знать, если это работает

person BKF    schedule 16.04.2016
comment
все еще получаю тот же результат - person Andrew Fox; 16.04.2016
comment
Не могли бы вы показать мне свой метод AircraftController@update - person BKF; 16.04.2016
comment
обновление общедоступной функции (AircraftRequest $ request, Aircraft $ aircraft, $ customer_id, $ aircraft_id) { dd ($ request); $request['registration'] = strtoupper($request['registration']); $aircraft-›findOrFail($aircraft_id)-›update($request-›all()); return redirect()-›action('AircraftController@show', $aircraft_id); } - person Andrew Fox; 16.04.2016
comment
Я только что добавил $customer_id для устранения неполадок, и я также пробовал без AircraftRequest - person Andrew Fox; 16.04.2016
comment
Хорошо, попробуйте еще раз и сообщите мне, возвращает ли он данные - person BKF; 16.04.2016
comment
Давайте продолжим обсуждение в чате. - person Andrew Fox; 16.04.2016