2016-04-14 73 views
2

我试图在laravel中创建一个表单来更新一些数据。 我开始使用下我的刀模板,以填补从模型数据形式:laravel表单生成错误的动作url /路由错误

{{ Form::model($sensor, array('action' => '[email protected]', $sensor->s_id)) }}  

$传感器发送到视图从控制器以这样的方式

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

文档不清楚我是否也需要使用Form :: open,但表单打开标记已经创建,所以我认为这足够了。

在我的路线我有这些路线:

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

我可以去像http://localhost:8000/settings/sensors/edit/105一个URL来访问的形式,从模型数据预填工作就像一个魅力。

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

我改写了表::模型的函数调用一些谷歌上搜索后,这一点:

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

现在当我打开网页,我直接得到这个错误:路径[http://localhost:8000/settings/sensors/edit/105]没有定义

这似乎奇怪的,因为我没有改变路线,并且有一个为这个网址定义的路线。任何想法,我要去哪里错了?

回答

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))) }} 
+0

谢谢,那确实解决了我的问题 – ErikL