路由laravel冲突

时间:2017-02-09 18:46:21

标签: php laravel routing

我必须配置路由以响应此网址:

  • / SomeStaticString
  • / {类别} / {ID}

要做到这一点,我在web.php文件中写了这段代码:

Route::get('/SomeStaticString','PagesController@SomeStaticString');
Route::get('/{main_category}/{slug}','PagesController@getArticle')->where('main_category', '^(?!SomeStaticString$).*');

这是处理这些网址的正确方法吗? 如果我必须添加其他网址" SomeStaticString"在我的申请中,最佳路线实施是什么?

1 个答案:

答案 0 :(得分:2)

您始终希望确保在通配符之前定义静态路由,否则路由器会将静态路由误认为是wilcard。下面是一个简单的例子:

//This will work
Route::get('foo', ' YourController@foo');
Route::get('{bar}', 'YourController@bar');

//In this order, foo will never get called
Route::get('{bar}', 'YourController@bar');    
Route::get('foo', ' YourController@foo');

当您开始向路径添加更多细分时,您始终希望将通配符保留在各自子组的后面。这就是应该如何订购逐步增长的路径树。

//This is good
Route::get('foo', ' YourController@foo');
Route::get('foo/bar', ' YourController@bar');
Route::get('foo/{id}', 'YourController@foobar');
Route::get('foo/bar/stuff', 'YourController@extrafoobar');
Route::get('foo/bar/{id}', 'YourController@megafoobar');
Route::get('foo/{bar}/stuff', 'YourController@uberfoobar');
Route::get('foo/{bar}/{id}', 'YourController@finalfoobar');

特别是对于您的情况,您可能希望将您的路线组织起来:

Route::get('/addClickBanner/{id_banner}','PagesController@SomeStaticString');
Route::get('someStaticString/{main_category}/{slug}','PagesController@getArticle')->where('main_category', '^(?!SomeStaticString$).*');
相关问题