如何解决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 举报,一经查实,本站将立刻删除。