如果我有下一条路线:
Route::get('/user/{id}', function($id) {
return View::make(users.profile, array('id' => $id));
})->where(array('id' => '[0-9]+'));`
我怎样才能在Restful控制器中做同样的事情?
Route::controller('/user', 'UserController');
我的UserController:
class UserController extends BaseController {
public function getProfile($id) {
return View::make('users.profile', array('id' => $id));
}
}
感谢您的关注。
答案 0 :(得分:0)
要确保methods
和URL
从您的终端运行php artisan routes
,这样您就可以获得您有{{1}访问过的所有路线的列表}}。在这种情况下,对于以下URL
和route
,您可能会发现controller
URL
user/profile/10
因此,使用// Route
Route::controller('/user', 'UserController');
// Controller
class UserController extends BaseController {
public function getProfile($id) {
return View::make('users.profile', array('id' => $id));
}
}
,此处http://domain.com/user/profile/10
将传递到10
方法中的$id
变量。还要记住,在profile
控制器中,每个方法都应该以他们响应的RESTfull
动词作为前缀,因此在这种情况下,此方法将响应HTTP
请求。
答案 1 :(得分:0)
where
调用时, Route::controller
似乎无法正常工作,但您可以使用Route::pattern
声明实现相同的功能。因此,例如,Route :: controller的这段代码(称为"隐式路由")可以工作,将id
限制为数字:
Route::pattern('id', '\d+');
Route::controller('/user/{id}', 'UserController');
然后,在UserController中,将从GET请求调用getIndex
方法:
class UserController extends BaseController {
public function getIndex($id) {
return View::make('users.profile', array('id' => $id));
}
}
但请注意,这仅适用于索引方法,即调用http:://example.com/user/99
。如果要使用其他控制器方法,使用"隐式路由",例如http:://example.com/user/profile/99
和控制器方法getProfile($id)
,则需要声明路由而不使用 {id}
参数,如下所示:
Route::controller('/user', 'UserController');
...在这种情况下,您无法使用->where
或Route::pattern
约束{id}
,因为没有{id}
参数约束
最后,您最好选择"显式路由,"正如您在答案开始时所做的那样,或使用RESTful资源控制器(see the docs)并将您的路线指定为:
Route::resource('user', 'UserController');
。
如果你订阅Laracasts,Jeffrey Way有一个很好的,明确的教程,关于"隐式路由的一些危险" here
答案 2 :(得分:0)
为了做到这一点,您希望将Route::controller
语句包装在一个组中,并为该组应用where
模式,因为全局设置它可能对其他路由不准确:
Route::group('where' => ['id' => '\d+'], function () {
Route::controller('users', 'UsersController');
// other restful controller definitions with this pattern go here
}