【问题标题】:Routing URI wildcard when using prefix使用前缀时路由 URI 通配符
【发布时间】:2019-06-24 23:17:11
【问题描述】:

在我决定将前端文件移到前缀 (/crm) 后面之前,我一直成功地为我的根路径 (/) 使用路由通配符。之后我得到 404 并且不知道如何解决它。我需要通配符作为我的 Javascript 前端路由 (/crm/orders/details/12345) 的全部内容,否则会导致 404。

因此,当我删除 prefix('crm') 时,使用以下代码设置的所有内容都可以正常工作。或者当我删除 {any} 加上匹配的正则表达式时,它在一级深度路由上部分工作(/crm 工作,但 /crm/orders em> 没有)。

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

我需要如何配置?

作品

Providers/RouteServiceProvider.php:

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

路由/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'));

路由/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*

【问题讨论】:

  • 当路由不工作时你能发送php artisan route:list的输出吗
  • 是的,我已经更新了我的帖子。路线列在那里。
  • 假设它是一个后端级别的 404 错误,它是一种有线行为。如果您将{any} 参数设为可选参数,如{any?},会怎样。只是在黑暗中拍摄。
  • 没有解决,看我对下面帖子的回答

标签: php laravel laravel-routing


【解决方案1】:

您需要将{any} 配置为可选参数。在您的特定情况下,该路线只会捕获 crm/something 路线(其中某些内容可以是一个或多个段)。

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

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

【讨论】:

  • 使 {any} 可选使得 /crm 不会给出 404,但任何更深的路由仍然会给出 404。我怀疑问题出在正则表达式。
  • 不,它不会.. 刚刚尝试和测试。如果这对您不起作用,则问题可能出在其他地方。
  • 可以看到请求here的截图
  • 你是完全正确的莫扎米尔。错误是由一些进行重定向的客户端代码引起的。我的愚蠢错误。感谢您的帮助!
  • 不用担心。如果这有帮助,请考虑将其标记为答案。见someone answers
猜你喜欢
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2016-03-26
  • 2013-03-06
  • 1970-01-01
  • 2015-12-10
相关资源
最近更新 更多