php - 路由 laravel 冲突

标签 php laravel routes

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

  • /一些静态字符串
  • /{类别}/{id}

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

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

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

最佳答案

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

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

关于php - 路由 laravel 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42144581/

相关文章:

php - 在 Hudson CI 上加速 PHP 持续集成构建服务器

php - WebSocket 错误:net::ERR_SSL_PROTOCOL_ERROR

php - 如何确定在 PHP else if 条件表达式中使用的输入字段类型 "submit"的当前 ID?

asp.net - 使用ASP.NET友好URL时如何忽略某些路由?

php - 虽然循环 : Works, 但也循环 HTML 并输出两次(一次反向?)

php - 如何在 php 中发出 jsonp 请求?

mysql - 为 foreach() 提供的参数无效 laravel-5.3

php - 在 Laravel 中放置文件的正确位置在哪里?

c# - asp.net MVC 4 中的动态 RouteConfig

ruby-on-rails - Rails 3 路由 - 如何使用范围创建管理员前缀