中间件无法运行

时间:2019-09-10 21:43:51

标签: php laravel laravel-5

我正在尝试本地化Laravel(最新版​​本)项目。 我需要将some1访问路由/home重定向到locale/home。 我有一个使用语言环境translatable.php的配置:

return [
    'locales' => [
        'en' => 'English',
        'ukr' => 'Ukrainian',
        'ru' => 'Russian'
    ],
    'locale' => 'en' // default locale
];

我正在使用语言middleware-Middleware/Language.php

class Language
{
    public function handle(Request $request, Closure $next)
    {
        \PhpConsole\Handler::getInstance()
            ->debug(!array_key_exists($request->segment(1), config('translatable.locales')), 'bool');

        \PhpConsole\Handler::getInstance()
            ->debug($request->segment(1), 'locale');

        // Check if the first segment matches a language code
        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('translatable.locale'));
            // Redirect to the correct url
            return redirect()->to(implode('/', $segments));
        }
        return $next($request);
    }
}

添加语言环境前缀-Http/Kernel.php

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\Language::class,
    ]
];

RouteServiceProvider.php

protected function mapWebRoutes()
{
    $locale = Request::segment(1);

    Route::middleware('web')
        ->namespace($this->namespace)
        ->prefix($locale)
        ->group(base_path('routes/web.php'));
}

,并且可以正常工作,如果我访问/home,它将重定向到/locale|fr|en.../home,除非该路由超过一个网段。

例如,/post/post-name将返回404错误,并且不会重定向到/en/post/post-name,但是我可以访问/en/post/post-nameen是默认语言环境。

0 个答案:

没有答案