gpt4 book ai didi

php - 在 Laravel 中,当 URL 段的数量超过一个时,中间件不会在 RouteGroup 中运行

转载 作者:行者123 更新时间:2023-12-04 03:07:57 25 4
gpt4 key购买 nike

我需要将位置添加到所有 URL。我在“RouteServiceProvider.php”中使用了“mapWebRoutes”,如下所示:

    protected function mapWebRoutes()
{
$locale = Request::segment(1);
Route::group([
'middleware' => 'web',
'namespace' => $this->namespace,
'prefix' => $locale
], function ($router) {
require base_path('routes/web.php');
});
}

但是当段数大于1时,中间件不运行。例如,位置被正确添加到下面的地址。

http://example.com/test 从中间件返回后 => http://example.com/en/test

但是位置没有添加到下面的地址:

http://example.com/test1/test2

这意味着中间件还没有运行。我添加 echo 'test'; exit(); 到中间件的第一行,以确保中间件正在运行。但是当段数大于1时,中间件不运行。

我的中间件代码是:

    public function handle($request, Closure $next)
{
if (!array_key_exists($request->segment(1), config('translatable.locales'))) {
// Store segments in array
$segments = $request->segments();
// Set the default language code as the first segment
$segments = array_prepend($segments, config('app.fallback_locale'));

// Redirect to the correct url
return redirect()->to(implode('/', $segments));
}
return $next($request);
}

最佳答案

我将 mapWebRoutes() 更改为以下代码并解决了问题:

 protected function mapWebRoutes()
{
if (!array_key_exists(Request::segment(1), config('translatable.locales'))) {
Route::group([
'middleware' => ['web'],
'namespace' => $this->namespace
], function ($router) {
require base_path('routes/web.php');
});
} else {
$locale = Request::segment(1);
Route::group([
'middleware' => ['web'],
'namespace' => $this->namespace,
'prefix' => $locale
], function ($router) {
require base_path('routes/web.php');
});
}
}

关于php - 在 Laravel 中,当 URL 段的数量超过一个时,中间件不会在 RouteGroup 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47378171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com