我有一个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}.
我正在努力做两件事之一。或者,从{team}模式中排除'api','settings'等值;或者让Laravel Spark路由在我的网络路由之前运行,这样我就可以确保在全部/ {team}之前检查所有有效路由。
任何想法都将不胜感激!
答案 0 :(得分:5)
我有一个建议,就是考虑使用teams
的前缀,然后是团队名称,你可能会发现你想为另一个部分添加更多类似的这样的全部内容遇到更多问题。也许使用此闭包的索引列出所有teams
也可能对系统的管理员有利?
如果您想继续沿着这条路走下去,请查看config.app.php
,我相信转换以下两家提供商可能会很好地实现您的目标。最终结果顺序:
App\Providers\SparkServiceProvider::class,
App\Providers\RouteServiceProvider::class,
我在最近一次安装后使用最新版本的Spark,现在这似乎是默认版本,如果这是一个红鲱鱼,请道歉!
答案 1 :(得分:2)
我似乎已经解决了它,使用以下模式:
Route::pattern('team', '(?!^settings$)([a-zA-Z0-9-]+)');
对于那些不熟悉问题的人,原则如下。在普通的Laravel安装中,您可以重新订购路线以确保以正确的顺序处理它们,并在固定路线之后放置通配符。
使用Spark,Spark包中有许多封装的路径。如果不想搞砸这种情况,以后可以更轻松地升级Spark,可以使用route pattern来限制参数的可接受值。因此,通过RegExs上的一些Google搜索,我似乎找到了一个模式,该模式将排除与我的{team}参数匹配的slugs。
我认为添加更多排除项就像插入管道操作符一样简单。
这显然也适用于标准的Laravel安装,但重新订购您的路线可能是更好的第一次通话。
答案 2 :(得分:0)
您应首先定义要排除的路线。 然后在它们下面定义您的模式。它们将优先于模式,因为Laravel路线按从上到下的顺序进行评估。