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

Php 使用不正确控制器的Laravel路线,php,regex,laravel,laravel-5,Php,Regex,Laravel,Laravel 5,当我试图访问wiki/article/create时,我收到了一条错误消息:试图获取非对象的属性,它似乎正在使用ArticleController->show('article',create')的第三条路径 第三条路线(第二条路线,因为用于存储的wiki/article也不会使用正确的控制器)是否需要/需要什么约束条件?尝试时,代码正在查找路线并发现: Route::get('/', 'CategoryController@index'); Route::get('wiki/{category

当我试图访问
wiki/article/create
时,我收到了一条错误消息:
试图获取非对象的属性
,它似乎正在使用ArticleController->show('article',create')的第三条路径

第三条路线(第二条路线,因为用于存储的
wiki/article
也不会使用正确的控制器)是否需要/需要什么约束条件?

尝试时,代码正在查找路线并发现:

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');
这就是你想要的,因为{category_slug}和{article_slug}没有约束,可以是任何东西,包括“article”和“create”

尝试更改此路由地址:

Route::get('wiki/{category_slug}/{article_slug}','ArticleController@show');
这样,您将为不同的控制器提供唯一的路由

如果确实要使用地址,可以在“article”一词中添加正则表达式约束,如下所示:

    Route::get('wiki/category/{category_slug}', 'CategoryController@categoryIndex');
    Route::get('wiki/category/{category_slug}/article/{article_slug}', 'ArticleController@show');
当您尝试时,您的代码正在查找路由并发现:

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');
这就是你想要的,因为{category_slug}和{article_slug}没有约束,可以是任何东西,包括“article”和“create”

尝试更改此路由地址:

Route::get('wiki/{category_slug}/{article_slug}','ArticleController@show');
这样,您将为不同的控制器提供唯一的路由

如果确实要使用地址,可以在“article”一词中添加正则表达式约束,如下所示:

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

这个正则表达式是如何关联的?请显示
ArticleController
code.@ThomasAyoub我认为您需要在路由中添加一个约束(即正则表达式),将
article
这个词从
{category}
中排除,这样它就可以转到正确的路由
->其中('category_slug','(?!article)([a-zA-Z0-9-]+))
添加此选项似乎可以解决问题,在访问
wiki/article
时,它不会使用第二或第三条路径。此正则表达式的关系如何?请显示
ArticleController
code。@ThomasAyoub我认为您需要在路径中添加一个约束(即正则表达式),以将
article
{category}中排除
这样它就可以走到正确的路线
->那里('category_slug','(?!article)([a-zA-Z0-9-]+)
添加这一点似乎可以解决问题,它在访问
维基/article
时不会使用第二或第三条路线。这将很好地工作,但是它给URI增加了额外的混乱-有没有办法排除带有正则表达式约束的单词
article
,这样路由就不会试图找到名为“article”的类别?谢谢!很好,这将很好地工作,但它给URI增加了额外的混乱-有没有办法排除带有正则表达式约束的单词
article
,这样路由就不会试图找到名为“article”的类别?谢谢!效果很好