форма laravel генерирует неправильный URL-адрес действия / ошибку маршрута

Я пытаюсь создать форму в laravel для обновления некоторых данных. Я начал с использования следующего в моем шаблоне лезвия, чтобы заполнить форму данными из модели:

{{ Form::model($sensor, array('action' => 'settingsController@editSensor', $sensor->s_id)) }}    

$ sensor отправляется в представление из контроллера следующим образом:

return view('settings.sensors.edit')->with('sensor', App\Sensor::find($sensorId))

В документации не указано, нужно ли мне также использовать Form :: open, но тег открытия формы уже создан, поэтому я решил, что этого будет достаточно.

В моих маршрутах есть следующие маршруты:

Route::get('/settings/sensors/edit/{sensorId}',['as' => 'sensor.edit', 'uses' => 'settingsController@editSensor']);
Route::post('/settings/sensors/edit/{sensorId}',['as' => 'sensor.edit', 'uses' => 'settingsController@editSensor']);

Я мог получить доступ к форме, перейдя по URL-адресу, например http://localhost:8000/settings/sensors/edit/105, предварительное заполнение данными из модели сработало отлично.

Проблема, с которой я столкнулся, заключалась в том, что кнопка отправки теперь работала. Он будет отправлен на http://localhost:8000/settings/sensors/edit/%7BsensorId%7D Очевидно, что параметр sensorId подставлялся неправильно.

Я переписал вызов функции Form :: model после того, как погуглил:

{{ Form::model($sensor, array('route' => route('sensor.edit',$sensor->s_id)), $sensor->s_id) }}    

Теперь, когда я открываю страницу, я получаю сообщение об ошибке: Route [http://localhost:8000/settings/sensors/edit/105estive не определено

Это кажется странным, поскольку я не менял маршруты, а для этого URL-адреса определен маршрут. Есть идеи, где я ошибаюсь?


person ErikL    schedule 14.04.2016    source источник


Ответы (1)


По сути, вы дублируете вызов маршрута. Когда вы делаете Form::model($sensor, array('route' =>, Laravel уже знает, что вы пытаетесь получить доступ к именованному маршруту, и ожидает имени маршрута. Поэтому, когда вы затем выполняете route(...), он сначала преобразует этот вызов маршрута, прежде чем пытаться найти маршрут с таким именем.

Другими словами, он не жалуется на то, что страница http://localhost:8000/settings/sensors/edit/105 не существует - он жалуется, что ни один маршрут не имеет этого as имени.

Удалите его и замените массивом с именем маршрута и параметром. Тогда вы также можете избавиться от лишних $sensor->s_id, например:

{{ Form::model($sensor, array('route' => array('sensor.edit', $sensor->s_id))) }}
person Joel Hinz    schedule 14.04.2016