我一直在Laravel项目中使用RESTful控制器,包括:
Route::controller('things', 'ThingController')
在我的routes.php中,我可以在ThingController
中定义如下函数:
public function getDisplay($id) {
$thing = Thing::find($id)
...
}
这样获取URL“... things/display/1”就会自动定向到控制器函数。这看起来相当方便,到目前为止对我来说效果很好。
我注意到我的许多控制器函数都是从url中按id获取模型开始的,我想如果能够使用路由模型绑定来完成这一任务会很好。
Route::model('thing', 'Thing');
Route::controller('things', 'ThingController')
并将ThingController
函数更改为
public function getDisplay($thing) {
...
}
我以为这会神奇地按照我想要的方式工作(就像我在Laravel中尝试过的其他方法一样),但不幸的是,当我尝试在函数中使用$thing
时,我得到了“尝试获取非对象的属性”。这是应该能够工作的东西,而我只是做错了,还是路由模型绑定只能与routes.php中显式命名的路由一起工作?
3条答案
按热度按时间ymzxtsji1#
如果您不介意使用URI路径、方法名,并且只使用
show
、edit
和update
方法,则可以使用资源控制器生成URI字符串,该字符串可以定义模型绑定。在
routes.php
中更改为您可以使用
php artisan routes
命令查看所有URI之后,您可以将threat参数作为
Thing
对象,而无需显式命名路由。如果您想访问
ThingController@show
,请传递您的型号ID,Laravel将自动检索它。http://example.com/things/1
mccptt672#
您可以使用Route:resource并提供其他方法。将您需要的路由放在特定
Route::resource
行之前。例如:然后在控制器中创建相应的方法。
以下是Laravel 4.2文档的官方文档:
图片来源:www.example.comhttp://laravel.com/docs/controllers#resource-controllers
向资源控制器添加附加路由
如果需要在默认资源路由之外向资源控制器添加其他路由,则应在调用
Route::resource
之前定义这些路由:g6ll5ycj3#
在您的模型中使用以下代码: