Laravel 5:在组中路由模型绑定

时间:2015-05-13 16:36:50

标签: laravel binding model routes

我在RouteServiceProvider

中制作了一个路线模型
public function boot(Router $router)
    {
        parent::boot($router);

        $router->model('article', 'App\Article');
    }

我的路线组:

Route::group(['prefix' => 'articles'], function(){
  //some routes ....

  Route::group(['prefix' => '{article}'], function(){
    Route::get('', [
      'as' => 'article.show',
      'uses' => 'ArticlesController@show'
    ]);

    Route::get('comments', [
       'as' => 'article.comments',
       'uses' => 'ArticlesController@comments'
    ]);
  });
});

/articles/666完美无缺

/articles/666/comments告诉我Http未找到异常。

2 个答案:

答案 0 :(得分:1)

我能够重新创建此问题,但仅当我在数据库中没有id为666的文章时。

奇怪的是,当我没有路线绑定设置时,我没有遇到过这个问题。

尝试创建ID为666的文章或将ID更改为您拥有的文章,它应该有效。如果没有,您可能有另一条路线覆盖这一路线。运行命令php artisan route:list以获取所有路由的列表。如果要缓存路由,请务必重新生成缓存。

答案 1 :(得分:0)

使用路由,您可以将模型直接注入到动作中:

// ArticlesController.php
...
public function show(Article $article) {
    return response()->json($article);
}

但是请记住,您需要使用“绑定”中间件组来确保模型隐式地从路由中获取。 因此,例如在您的路线配置中:

Route::middleware('bindings')->group(function() {
    Route::group(['prefix' => 'articles'], function(){
        Route::group(['prefix' => '{article}'], function(){
            Route::get('', [
                'as' => 'article.show',
                'uses' => 'ArticlesController@show'
            ]);

            Route::get('comments', [
                'as' => 'article.comments',
                'uses' => 'ArticlesController@comments'
            ]);
        });
    });
});

这似乎没有很好的记录。