Laravel将参数添加到URL

时间:2018-09-24 11:07:30

标签: php laravel url query-string

在我的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);
}

任何指针将不胜感激,谢谢。

0 个答案:

没有答案