Laravel 路由::在不同组中使用相同名称绑定?

Laravel 路由::在不同组中使用相同名称绑定?,laravel,laravel-4,Laravel,Laravel 4,如果我有两个路由组用于简单的路由前缀,是否可以仅为该组设置route::bind per 当我执行以下操作时: Route::group( array('prefix'=>'pre1'), function(){ Route::bind('items', function( $value, $route ){ $item = Item::find( $value ); if( !$item ) App::abort( 404 ); return $item;

如果我有两个路由组用于简单的路由前缀,是否可以仅为该组设置route::bind per

当我执行以下操作时:

Route::group( array('prefix'=>'pre1'), function(){
  Route::bind('items', function( $value, $route ){
    $item = Item::find( $value );
    if( !$item ) App::abort( 404 );
    return $item;
  })

  Route::resource('items', .... );
})

Route::group( array('prefix'=>'pre2'), function(){
  //put bind for users here...
  Route::bind('items', function( $value, $route ){
    $user_id = $route->parameter('users')->getAttribute('id');
    $item = Item::where('id', $value)->whereUserId( $user_id );
    if( !$item ) App::abort( 404 );
    return $item;
  })

  Route::resource('users.items', ....)
})
“items”的第一个绑定被最后一个声明的绑定覆盖。我会将“items”重命名为其他名称,但嵌套的资源路由是由laravel自动生成的

第一条路线是

/items/{items}

第二个在哪里

/用户/{users}/items/{items}


我只想简单地重命名结束路由,但它们对于从对一种资源拥有权限的管理员和对另一种资源拥有权限的用户使用的资源来说是有意义的。

有几件事。首先,你不需要这个代码

  Route::bind('items', function( $value, $route ){
    $item = Item::find( $value );
    if( !$item ) App::abort( 404 );
    return $item;
  })
你只需要

  Route::bind('items', 'Item')
如果无法在运行时绑定项模型,它将自动抛出404

其次,如果有两个同名的不同绑定,您将无法执行您想要的操作-但是有两个选项

选项1只是在routes文件中明确定义所有路由,而不使用Route::resource。来自的这篇文章很好地解释了为什么应该手动定义每个路由

第二个选项只是使用main Items路由绑定,但向用户项添加一个过滤器。大概是这样的:

Route::group( array('prefix'=>'pre2', 'before' => 'user.item'), function(){
然后定义一个过滤器,用于检查项目是否属于用户

Route::filter('user.item', function($route, $request)
{
    if ($route->parameter('item')->user_id !== Auth::user()->id)
    {
        App::abort(404);
    }
});

有几件事。首先,你不需要这个代码

  Route::bind('items', function( $value, $route ){
    $item = Item::find( $value );
    if( !$item ) App::abort( 404 );
    return $item;
  })
你只需要

  Route::bind('items', 'Item')
如果无法在运行时绑定项模型,它将自动抛出404

其次,如果有两个同名的不同绑定,您将无法执行您想要的操作-但是有两个选项

选项1只是在routes文件中明确定义所有路由,而不使用Route::resource。来自的这篇文章很好地解释了为什么应该手动定义每个路由

第二个选项只是使用main Items路由绑定,但向用户项添加一个过滤器。大概是这样的:

Route::group( array('prefix'=>'pre2', 'before' => 'user.item'), function(){
然后定义一个过滤器,用于检查项目是否属于用户

Route::filter('user.item', function($route, $request)
{
    if ($route->parameter('item')->user_id !== Auth::user()->id)
    {
        App::abort(404);
    }
});

我同意该链接中的大部分文章。我觉得将整个应用程序路由放在一个文件中是一种过激的做法,使用资源至少减轻了在每个路由/控制器上使用标准4种方法的重复性。我没有想过用这种方式使用过滤器,很感谢帖子,我同意链接中的大部分文章。我觉得将整个应用程序路由放在一个文件中是一种过激的做法,使用资源至少减轻了在每个路由/控制器上使用标准4种方法的重复性。我没有想过用这种方式使用过滤器,谢谢你的帖子