0

我的 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 中解决这个问题?

编辑:将上述内容与以下答案一起使用。现在我的获取路线有错误

Route::get('users/(:any?)', 'users@show');
Route::get('users', 'users@index');

/users 和 /users/ 都调用 users@index 我不想要的。

我需要 GET /users 去 users@index 和 GET /users/ 去 users@show with null 参数

4

2 回答 2

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');
    }
});
于 2013-02-13T14:39:22.593 回答
0

你需要考虑的一点。

路由的定义没有前斜线。唯一的例外是仅用正斜杠表示的默认路由。

所以Route::delete('/(:any)', 'resources@destroy')会导致不希望的结果。

此外,您的订单是错误的。

(:any)也将匹配user并将请求发送到resources控制器。

所以你需要做的是

  • 更改顺序(使其相反)。
  • resources根据规则改变考虑的路线。诸如此类resources/delete……

我想要发生的是使用参数 null 调用 users@destroy 路由。在我的控制器中,对于尝试删除空资源的用户,我有一个例外。

为此,(在进行上述更改后....)

更改路线将使第二段成为可选user/(:any)user/(:any?)

之后,直奔前行。

$foo = URI::segment(2, null);
//Rest will follow.

编辑

现在,下面的代码,

Route::get('users/(:any?)', 'users@show');
Route::get('users', 'users@index');

没有任何意义。

如果我输入user,路由器应该采取什么?

user@show没有可选段或user@index

路线的设计是为了消除歧义。你正朝着相反的方向前进,这一切都变得模棱两可。

做一个简单的路线。

喜欢表演

  user/show

删除

  user/delete

编辑

  user/edit

ETC....

您应用的路由类型对于用户和开发人员来说都是令人困惑的,因为它带有歧义。

于 2013-02-13T10:51:58.513 回答