我试图在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]未定义
这看起来很奇怪,因为我没有对路线进行任何更改,并且为此网址定义了一条路线。我知道哪里出错了?
答案 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))) }}