我正在研究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'为空:
2-如果cookie的地理位置不是null代码:($ request-> cookies-> has('geo'))
(我对第2步的想法是针对已经有一个国家/地区的现有客户(已经有一个具有该值的Cookie),但他们希望在static.select-country视图中手动更改国家/地区,并避免通过循环1覆盖GeoIP检测器)
我的问题:目前,当客户在static.select-country视图中手动选择时,它会移至首页:
答案 0 :(得分:1)
您可以为该选择的国家页面创建一条路线,而在上面的中间件中忽略该路线。那么每个人都可以访问该页面并从列表中选择自己的国家/地区,然后在Cookie中设置该国家/地区代码。
if ($request->is('YOUR_ROUTE_PATH')) {
return $next($request);
}