Psr7Middlewares\Middleware\Geolocate::__invoke PHP Метод

__invoke() публичный Метод

Execute the middleware.
public __invoke ( Psr\Http\Message\ServerRequestInterface $request, Psr\Http\Message\ResponseInterface $response, callable $next ) : Psr\Http\Message\ResponseInterface
$request Psr\Http\Message\ServerRequestInterface
$response Psr\Http\Message\ResponseInterface
$next callable
Результат Psr\Http\Message\ResponseInterface
    public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
    {
        if (!self::hasAttribute($request, ClientIp::KEY)) {
            throw new RuntimeException('Geolocate middleware needs ClientIp executed before');
        }
        $ip = ClientIp::getIp($request);
        if ($ip !== null) {
            if ($this->saveInSession) {
                $ips =& self::getStorage($request, self::KEY);
                if (isset($ips[$ip])) {
                    $address = new AddressCollection($ips[$ip]);
                } else {
                    $address = $this->geocoder->geocode($ip);
                    $ips[$ip] = $address->all();
                }
            } else {
                $address = $this->geocoder->geocode($ip);
            }
            $request = self::setAttribute($request, self::KEY, $address);
        }
        return $next($request, $response);
    }