如何在 laravel 路由中创建不包括某些 slug 的 slug 路由?

Posted

技术标签:

【中文标题】如何在 laravel 路由中创建不包括某些 slug 的 slug 路由?【英文标题】:How to create a slug route excluding some slug in laravel routing? 【发布时间】:2019-06-11 09:33:29 【问题描述】:

我目前正在跟踪路线。

$router->get('/contact-us','HomeController@contactUs')->name('contact-us');
$router->get('/about','HomeController@about')->name('about');

现在,我想让一般页面可以通过以下路线访问,

$router->get('/slug','SomeController@about')->name('general-page');

但主要问题是联系我们,关于页面匹配 slug 路线和错误的控制器被调用。有什么办法可以从一般的页面路径中排除这种 slug。

【问题讨论】:

尝试改变他们的顺序。像这样的东西对我有用 只需为其中一个添加前缀即可。你不能有两条路线但路径相同。 @ijubadr 所以 slug 路线应该是在联系我们和关于路线之后? 我记得用catch all route,我把它放在了底部 如果你在任何时候缓存过,清除路由缓存 【参考方案1】:

您可以在路线中添加一个模式,其中排除了术语 contact-usabout,如下所示:

$router->get('/slug','SomeController@about')
    ->where('slug', '^((?!about|contact-us).)*$')
    ->name('general-page');

有关正则表达式的说明,请参阅here

这样路由定义的顺序没有任何影响。

【讨论】:

以上是关于如何在 laravel 路由中创建不包括某些 slug 的 slug 路由?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中创建不区分大小写的数据库索引?

如何在Controller中创建不可变的BusinessLayer而不更改其属性?

如何在 Spring Boot 客户端应用程序中创建不共享底层网络连接的套接字

在 Java 中创建不依赖 if-else 的工厂方法

在组中创建不透明数据集

Laravel:如何将某些路由参数限制为特定值?