Laravel路线使用不正确的控制器

时间:2016-05-25 13:09:58

标签: php regex laravel laravel-5

Route::get('/', 'CategoryController@index');
Route::get('wiki/{category_slug}', 'CategoryController@categoryIndex');
Route::get('wiki/{category_slug}/{article_slug}', 'ArticleController@show');
Route::resource('wiki/article', 'ArticleController');

当我尝试访问wiki/article/create时,收到此错误消息:Trying to get property of non-object并且它似乎正在使用第3条路线at ArticleController->show('article', 'create')

在第3条路线上需要/有什么限制条件(从wiki/article开始存储的第2条路由也不会使用正确的控制器)?

1 个答案:

答案 0 :(得分:0)

当您尝试http://domain.com/wiki/article/create时,您的代码会查找您的路线并找到:

Route::get('wiki/{category_slug}/{article_slug}','ArticleController@show');

您要求的是,{category_slug}和{article_slug}没有约束,可以是任何东西,包括“article”和“create”。

尝试更改此路线地址:

    Route::get('wiki/category/{category_slug}', 'CategoryController@categoryIndex');
    Route::get('wiki/category/{category_slug}/article/{article_slug}', 'ArticleController@show');

这样你就可以拥有不同控制器的独特路线。

如果您真的想使用该地址,可以在“文章”一词中添加正则表达式约束,如下所示:

    Route::get('wiki/{category_slug}', 'CategoryController@categoryIndex')->where(['category_slug'=>'\b(?:(?!article)\w)+\b']);
    Route::get('wiki/{category_slug}/{article_slug}', 'ArticleController@show')->where(['category_slug'=>'\b(?:(?!article)\w)+\b']);