laravel表单生成错误的操作url / route错误

时间:2016-04-14 19:30:52

标签: php laravel laravel-routing laravel-blade

我试图在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,但是已经创建了表单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']);

我可以通过转到http://localhost:8000/settings/sensors/edit/105这样的网址来访问该表单,从模型中预先填充的数据就像一个魅力。

我遇到的问题是提交按钮现在可以正常工作了。它会提交给http://localhost:8000/settings/sensors/edit/%7BsensorId%7D 显然,sensorId参数没有被正确替代。

我在google搜索之后重写了Form :: model函数调用:

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

当我现在打开页面时,我直接收到此错误:路由[http://localhost:8000/settings/sensors/edit/105]未定义

这看起来很奇怪,因为我没有对路线进行任何更改,并且为此网址定义了一条路线。我知道哪里出错了?

1 个答案:

答案 0 :(得分: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))) }}