在我的Laravel应用中,每个URL后面都有一个查询字符串,以使用户可以在浏览器的多个选项卡上选择多个客户端,然后在控制器中读出来选择正确的客户端。这样看起来可能像这样:https://url-to-my-website.com/module/page?client_id=1
现在每个客户端可以有多种语言,因此我想使之也可以使用户在URL中也有。因此,最终结果将如下所示:https://url-to-my-website.com/module/page?client_id=1&lang=en
我正在使用与客户端相同的代码,但是由于某些原因,它无法正常工作。这两个功能都放在单独的中间件中,我可以在需要它们的路由上调用它们。 这是最适合客户的客户端:
public function handle($request, Closure $next)
{
$url = url()->current();
$needle = '?client_id=';
if ($request->get('client_id', null) === null) {
if (mb_stripos($url, $needle) === false) {
$lastUrl = url()->previous();
if (mb_stripos($lastUrl, $needle) !== false) {
$parameter = mb_substr($lastUrl, mb_stripos($lastUrl, $needle));
$parameter = explode('&', $parameter)[0];
$request->merge(['client_id' => mb_substr($parameter, mb_strlen($needle))]);
} elseif (access()->getCurrentClient()) {
$request->merge(['client_id' => access()->getCurrentClient()->client_id]);
}
}
}
return $next($request);
}
这是一种不适用于语言的语言:
public function handle($request, Closure $next)
{
$url = url()->current();
$needle = '&lang=';
if ($request->get('lang', null) === null) {
if (mb_stripos($url, $needle) === false) {
$lastUrl = url()->previous();
if (mb_stripos($lastUrl, $needle) !== false) {
$parameter = mb_substr($lastUrl, mb_stripos($lastUrl, $needle));
$parameter = explode('&', $parameter)[0];
$request->merge(['lang' => mb_substr($parameter, mb_strlen($needle))]);
} elseif (access()->getCurrentStoreView()) {
$request->merge(['lang' => access()->getCurrentLanguage()->code]);
}
}
}
return $next($request);
}
任何指针将不胜感激,谢谢。