【问题标题】:Routing laravel conflict路由 laravel 冲突
【发布时间】:2017-02-09 18:46:20
【问题描述】:

我必须配置路由来响应这个 url:

  • /SomeStaticString
  • /{类别}/{id}

为此,我在 web.php 文件中编写了这段代码:

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

这是处理这些网址的正确方法吗? 如果我必须在我的应用程序中添加其他 url “SomeStaticString”,那么最好的路由实现是什么?

【问题讨论】:

  • 您的意思是->where('main_category', '^(?!addClickBanner$).*'); 吗?如果id_banner 是一个数字,而slug 不是,你可以用[0-9]+ 约束id_banner
  • 仅使用路由参数,例如在 Route::get('/{main_category}/{slug}'...) 中,如果在该路由之前没有明确说明 uri,则将获取每个 uri。
  • 您应该在您关心的每条路线下方放置一条类似/{main_category}/{slug} 的路线。应在此路由上方放置一条新路由,例如 SomeStaticString

标签: php laravel routing


【解决方案1】:

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

//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$).*');

【讨论】:

  • 很好的解释
猜你喜欢
  • 2017-04-15
  • 2018-05-23
  • 2018-11-30
  • 2015-09-27
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多