我在Laravel 3 RESTful api项目中有以下路线
Route::delete('/(:any)', 'resources@destroy');
Route::delete('users/(:any)', 'users@destroy');
我遇到的问题是当用户向/ users /
发送删除请求时我想要发生的是使用参数users@destroy
调用null
路由。在我的控制器中,我对尝试删除null
资源的用户有例外。
似乎正在发生的是使用参数resource@destroy
调用users
路由。这显然会对删除用户资源产生不良影响。
我知道我可以修改我的.htaccess但技术上/ users /确实属于用户控制器而不属于资源控制器。我想保持这种关系。
我想知道是否有一种简单的方法可以在Laravel中解决这个问题?
编辑:让上述方法得到以下答案。现在我的get路线出错了
Route::get('users/(:any?)', 'users@show');
Route::get('users', 'users@index');
/ users和/ users /都调用了我不想要的用户@index。
我需要GET / users转到用户@index和GET / users /转到用户@ show with null parameter
答案 0 :(得分:1)
我通过在路线中添加过滤器来处理尾随斜线
Route::group(array('before' => 'trailingslash'), function()
{
//routes in here
});
Route::filter('trailingslash', function() {
$current = URI::full();
if(substr($current, -1) == '/'){
return return Response::error('404');
}
});
答案 1 :(得分:0)
您需要考虑的一点。
路由的定义没有正斜杠。唯一的例外是默认路由,它只用前斜杠表示。
因此Route::delete('/(:any)', 'resources@destroy')
会导致意外结果。
此外,您的订单有误。
(:any)
也会匹配user
,并会将请求发送给resources
控制器。
所以你需要做的是,
resources
的路线。比如resources/delete
等...... 我想要发生的是使用参数null调用users @ destroy route。在我的控制器中,我有一个例外,用户试图删除空资源。
执行此操作,(在进行上述更改后....)
将user/(:any)
的路线更改为user/(:any?)
,这将使第2段可选。
之后,直截了当。
$foo = URI::segment(2, null);
//Rest will follow.
现在,以下代码,
Route::get('users/(:any?)', 'users@show');
Route::get('users', 'users@index');
没有任何意义。
如果我输入user
,路由器会假设采取什么?
user@show
没有可选细分或user@index
?
路由的设计使其消除了歧义。你正朝着相反的方向前进,让它变得模棱两可。
只做一条简单的路线。
喜欢show
user/show
删除
user/delete
修改的
user/edit
等......
您正在应用的路由类型对于用户和开发人员来说都很混乱,因为它带有歧义。