Laravel全球中间件设定国家价值的逻辑失败

时间:2018-12-14 15:39:06

标签: php laravel laravel-5 cookies geolocation

我正在研究Laravel全球中间件,以便在Web访问者访问网站时在Cookie中设置国家/地区值。

因此,我创建以下函数:

public function handle($request, Closure $next)
{
    if(!$request->cookies->has('geo'))
    {
        if (!$request->cookies->has('geo') && GeoIP()->getLocation()->iso_code !== null) {
            //find customer IP location
            $code = strtolower(GeoIP()->getLocation()->iso_code);
            // creates a cookie with iso_code value
            $cookie = cookie('geo', $code, 600);
            //move to page
            return $next($request)->cookie($cookie);
        }
        else{
            return response()->view('static.select-country');
            //move to page
            return $next($request);
        }
    }
    if ($request->cookies->has('geo')) {
        //move to page
        return $next($request);
    }
}

1-如果cookie'geo'为空:

  • 首先:cookie'geo'为空,Torann GeoIp检测器也不为空->使用国家/地区ISO_CODE创建一个cookie
  • 否则(geo cookie为空&& GeoIP检测器为null)->转到页面select-country.phtml,以选择您的国家/地区并手动设置cookie。

2-如果cookie的地理位置不是null代码:($ request-> cookies-> has('geo'))

  • 访问者已经有一个cookie->移至页面。

(我对第2步的想法是针对已经有一个国家/地区的现有客户(已经有一个具有该值的Cookie),但他们希望在static.select-country视图中手动更改国家/地区,并避免通过循环1覆盖GeoIP检测器)

我的问题:目前,当客户在static.select-country视图中手动选择时,它会移至首页:

  • 但是应用程序使用GeoIP检测器分配cookie,而不是考虑客户手动选择的国家/地区(在static.select-country中创建的cookie)。

1 个答案:

答案 0 :(得分:1)

您可以为该选择的国家页面创建一条路线,而在上面的中间件中忽略该路线。那么每个人都可以访问该页面并从列表中选择自己的国家/地区,然后在Cookie中设置该国家/地区代码。

if ($request->is('YOUR_ROUTE_PATH')) {
   return $next($request);
}