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条路由也不会使用正确的控制器)?
答案 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']);