如何从Laravel路线模式中排除slu ..

Kur*_*ucu 7 laravel laravel-routing laravel-spark laravel-5.4

我有一个Laravel Spark应用程序,并希望在团队和项目的路径中使用前两个参数,例如about_us,settings,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}.
Run Code Online (Sandbox Code Playgroud)

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

任何想法,将不胜感激!

小智 5

我有一个建议,就是考虑拥有前缀teams,然后是团队名称之后,你可能会发现你想为另一个部分添加更多类似这样的全部内容并遇到更多问题.或许列出所有teams使用此闭包的索引也可能对系统管理员有利吗?

如果您想继续沿着这条路走下去,请看看您的情况config.app.php,我相信转换以下两家提供商可能会很好地实现您的目标.最终结果顺序:

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

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


Kur*_*ucu 2

我似乎已经解决了这个问题,使用以下模式:

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

对于那些刚接触这个问题的人来说,原则如下。在普通的 Laravel 安装中,您可以重新排序您的路线,以确保它们以正确的顺序处理,并在固定路线后面放置通配符。

对于 Spark,有许多路由都封装在 Spark 包中。如果不想搞乱这个,为了以后更容易进行 Spark 升级,可以使用路由模式来限制参数的可接受值。因此,通过对正则表达式进行一些谷歌搜索,我似乎找到了一种模式,该模式将排除与我的 {team} 参数匹配的 slugs。

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

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