微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel-更改中间件的路线

如何解决Laravel-更改中间件的路线

假设我有这种网址:

example.com/en/
example.com/en/login
example.com/fr/login

我想使用中间件来设置语言,然后返回不包含语言部分的要处理的路由。这样路由器将获得//login,而没有任何语言内容

public function handle(Request $request,Closure $next) {
        app()->setLocale($request->segment(1));
        // $request->server->set('REQUEST_URI',substr($_SERVER['REQUEST_URI'],4));// not working

        return $next($request);
    }

解决方法

我建议将语言存储在会话中,并使用中间件来设置Locale。

工作示例

SetLocale.php中间件

public function handle($request,Closure $next)
{
    if (Session::has('language'))
    {
        App::setLocale(strtolower(Session::get('language')));
    }
    return $next($request);
}

用于设置会话语言的控制器功能

 public function setLanguage(string $language)
{
    if (Session::has('language'))
    {
        Session::forget('language');
    }
    Session::put('language',$language);

    return redirect()->back();
}

因此,现在网站上发生的所有事情,中间件都将检查语言并将其设置为会话中的内容。

也不要忘记在app \ Http \ Kernel.php的$ middlewareGroups中指定中间件

您可以在网站上的任何位置创建一个表单,供用户选择其语言首选项以及到控制器功能的路径。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。