使用前缀时路由URI通配符

时间:2019-01-31 13:19:54

标签: php laravel laravel-routing

我一直在成功将根路径(/)用作路由通配符,直到我决定将前端文件移动到前缀(/ crm)后。之后,我得到了404,并且不知道如何解决。我需要通配符来捕获我的Javascript前端路由(/ crm / orders / details / 12345),否则将导致404。

因此,当我删除 prefix('crm')时,使用以下代码设置的所有内容都可以正常运行。或者,当我删除 {any} 以及匹配的正则表达式时,它会在部分深度的路由上部分起作用( / crm 有效,但 / crm / orders 不)。

但是当我同时拥有前缀和通配符时, / crm 给我一个404。

我该如何配置?

作品

Providers / RouteServiceProvider.php:

Route::namespace('App\Http\Controllers')
  ->group(base_path('routes/crm.php'));

routes / crm.php

Route::get('/{any}', function ()
{
    return view('crm');
})->where('any', '.*');

不起作用

Providers / RouteServiceProvider.php:

Route::prefix('crm')
  ->namespace('App\Http\Controllers')
  ->group(base_path('routes/crm.php'));

routes / crm.php

Route::get('/{any}', function ()
{
    return view('crm');
})->where('any', '.*');

php artisan route:list 的输出如下

| Domain | Method | URI |Name | Action | Middleware  |
*snap*
| | GET|HEAD | crm/{any} | | Closure | |
*snap*

1 个答案:

答案 0 :(得分:0)

您需要将{any}配置为可选参数。在您的特定情况下,该路线将仅捕获crm/something条路线(其中某些路线可能属于一个或多个路段)。

Route::prefix('crm')->group(function () {
    Route::get('/{any?}', function () {
        dd("I am here");
    })->where('any', '.*');
});

但是,如果您将{any}添加为可选内容,它也会捕获/crm。这是你想要的?