Eva\EvaEngine\Interceptor\Dispatch::intercept PHP Method

intercept() protected method

Intercept a input http request
protected intercept ( Phalcon\Http\Request $request, array $params, Phalcon\Cache\BackendInterface $cache ) : boolean
$request Phalcon\Http\Request
$params array
$cache Phalcon\Cache\BackendInterface
return boolean Will return true if cache hit.
    protected function intercept(Request $request, array $params, CacheInterface $cache)
    {
        $ignores = $params['ignore_query_keys'];
        array_push($ignores, $this->timestampQueryKey);
        array_push($ignores, $params['jsonp_callback_key']);
        $debugQueryKey = $this->getDebugQueryKey();
        array_push($ignores, $debugQueryKey);
        list($headersKey, $bodyKey) = $this->generateCacheKeys($request, $ignores);
        $hasCache = false;
        $headersCache = $bodyCache = '';
        if (!$request->getQuery($debugQueryKey)) {
            $bodyCache = $cache->get($bodyKey);
            $headersCache = $cache->get($headersKey);
            $hasCache = $headersCache && $bodyCache;
        } else {
            // 要求刷新缓存时:先删了已有缓存,避免不正常退出时(如资源被移除)缓存未被刷新的情况。
            $cache->delete($headersKey);
        }
        if ($hasCache) {
            /**
             * @var \Phalcon\Http\ResponseInterface $response
             */
            $response = $request->getDI()->getResponse();
            if ($headersCache) {
                //$headersCache = unserialize($headersCache);
                $headersCache = json_decode($headersCache);
                foreach ($headersCache as $key => $headerValue) {
                    if (is_int($key)) {
                        $response->setRawHeader($headerValue);
                    } else {
                        $response->setHeader($key, $headerValue);
                    }
                }
            }
            $callbackKey = $params['jsonp_callback_key'];
            if ($params['format'] == 'jsonp' && $callbackKey && ($callbackValue = $request->getQuery($callbackKey))) {
                $bodyCache = $callbackValue . '(' . $bodyCache . ')';
            }
            $response->setContent($bodyCache);
            return true;
        }
        // cache missing
        return false;
    }