7

我有一个 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} 的全部捕获之前检查所有有效路由。

任何想法,将不胜感激!

4

3 回答 3

5

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

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

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

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

于 2017-02-14T21:05:35.993 回答
2

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

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

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

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

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

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

于 2017-02-20T18:18:53.183 回答
0

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

于 2017-02-07T23:20:53.610 回答