Laravel多语言路由前缀

时间:2019-06-24 10:32:22

标签: php laravel laravel-5.1

我设法使一些带有和不带有前缀的路由正常工作。拥有不带前缀的路由正常工作很重要,因为回去并将所有get / post链接更改为正确的本地链接的工作量很大。

例如,URL localhost/blog下面的代码重定向到localhost/en/blog(或会话中存储的任何其他语言)。

但是,我注意到带有参数的URL不起作用,因此/blog/read/article-name将产生404而不是重定向到/en/blog/read/article-name

路线:

Route::group([
    'prefix' => '{locale}',
    'middleware' => 'locale'],
    function() {
        Route::get('blog', 'BlogController@index');
        Route::get('blog/read/{article_permalink}', 'BlogController@view');
    }
);

中间件负责重定向,某些路由似乎根本不会触发,就好像路由组与URL不匹配一样。

public function handle($request, Closure $next)
{
    if ($request->method() === 'GET') {
        $segment = $request->segment(1);

        if (!in_array($segment, config('app.locales'))) {
            $segments = $request->segments();
            $fallback = session('locale') ?: config('app.fallback_locale');
            $segments = array_prepend($segments, $fallback);

            return redirect()->to(implode('/', $segments));
        }

        session(['locale' => $segment]);
        app()->setLocale($segment);
    }

    return $next($request);
}

0 个答案:

没有答案