【问题标题】:How to exclude slugs from a Laravel route pattern如何从 Laravel 路由模式中排除 slug
【发布时间】:2017-06-25 04:51:44
【问题描述】:

我有一个 Laravel Spark 应用程序,并且想在团队和项目的路由中使用前两个参数,但 about_us、设置、api 等例外。

我已经设置了我的路线,类似于:

Route::pattern('team', '[a-zA-Z0-9-]+');
Route::pattern('project', '[a-zA-Z0-9-]+');

Route::get('/home', 'HomeController@show');

Route::group(['prefix' => '{team}'], function () {
    Route::get('/', 'TeamController@dashboard');
    Route::group(['prefix' => '{project}'], function () {
        Route::get('/', 'ProjectController@dashboard');
        ...

//Spark defines routes such as /settings after the apps routing file is processed;
//thus I cannot route to /settings as it's caught by /{team}.

我正在努力做两件事之一。或者,从 {team} 模式中排除“api”、“settings”等值;或者让 Laravel Spark 路由在我的 web 路由之前运行,这样我就可以确保在 /{team} 的全部捕获之前检查所有有效的路由。

任何想法都将不胜感激!

【问题讨论】:

  • 先定义静态路由,然后把这个 catch all 组放在最后。这是一个完美的方法,因为路由顺序很重要。
  • 嗨,克里斯,这将是我的正常做法,但是对于 Spark,Spark 定义的静态路由当然不在您的 web.php 路由文件中;他们在别的地方。

标签: laravel laravel-routing laravel-5.4 laravel-spark


【解决方案1】:

我的一个建议是考虑使用teams 前缀,然后是团队名称,您可能会发现您想为另一部分添加更多类似这样的包罗万象并遇到更多问题下线。也许使用此闭包的索引列出所有teams 对系统管理员也有好处?

如果您想继续这条路线,请查看您的config.app.php,我相信切换以下两个提供商可能会达到您的目标。最终结果顺序:

App\Providers\SparkServiceProvider::class, App\Providers\RouteServiceProvider::class,

我自己最近安装后正在使用最新版本的 Spark,现在这似乎是默认设置,如果这是一个红鲱鱼,请道歉!

【讨论】:

  • 前几天我尝试切换这些,但没有任何区别(这也让我感到惊讶)。我会再试一次并报告。
  • 尝试删除您的服务提供商缓存:bootstrap/cache/services.php
  • 我做了,没有任何区别。
【解决方案2】:

我似乎已经解决了它,使用以下模式:

Route::pattern('team', '(?!^settings$)([a-zA-Z0-9-]+)');

对于那些不熟悉这个问题的人,原则如下。在普通的 Laravel 安装中,您可以重新排序路由以确保以正确的顺序处理它们,在固定路由之后放置通配符。

使用 Spark,有许多路由都封装在 Spark 包中。不想弄乱这个,允许以后更容易的 Spark 升级,可以使用route pattern 来限制参数的可接受值。因此,通过在 RegEx 上进行一些谷歌搜索,我似乎找到了一种模式,该模式将排除与我的 {team} 参数匹配的 slug。

我相信添加更多排除项就像插入管道运算符一样简单。

这显然也适用于标准 Laravel 安装,但重新排序路由可能是更好的第一次调用。

【讨论】:

    【解决方案3】:

    您应该首先定义要排除的路由。 然后在它们下面定义你的模式。它们将优先于模式,因为在 Laravel 中路由是按从上到下的顺序计算的。

    【讨论】:

    • 您好,谢谢。在 Spark 中,有一些预定义的路由(例如 /settings)不在 web 路由文件中 - 框架在路由文件之后调用它们。所以我的问题是要么使用模式来排除这些,要么知道如何让框架首先运行 Spark 的路由。
    猜你喜欢
    • 2016-10-29
    • 2018-10-12
    • 2023-04-09
    • 1970-01-01
    • 2016-05-10
    • 2018-12-21
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    相关资源
    最近更新 更多