mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
119 lines
3.6 KiB
PHP
119 lines
3.6 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\PageCache\Model\App\FrontController;
|
|
|
|
use Magento\Framework\App\PageCache\NotCacheableInterface;
|
|
use Magento\Framework\App\Response\Http as ResponseHttp;
|
|
|
|
/**
|
|
* Plugin for processing builtin cache
|
|
*/
|
|
class BuiltinPlugin
|
|
{
|
|
/**
|
|
* @var \Magento\Framework\App\Config\ScopeConfigInterface
|
|
*/
|
|
protected $config;
|
|
|
|
/**
|
|
* @var \Magento\Framework\App\PageCache\Version
|
|
*/
|
|
protected $version;
|
|
|
|
/**
|
|
* @var \Magento\Framework\App\PageCache\Kernel
|
|
*/
|
|
protected $kernel;
|
|
|
|
/**
|
|
* @var \Magento\Framework\App\State
|
|
*/
|
|
protected $state;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param \Magento\PageCache\Model\Config $config
|
|
* @param \Magento\Framework\App\PageCache\Version $version
|
|
* @param \Magento\Framework\App\PageCache\Kernel $kernel
|
|
* @param \Magento\Framework\App\State $state
|
|
*/
|
|
public function __construct(
|
|
\Magento\PageCache\Model\Config $config,
|
|
\Magento\Framework\App\PageCache\Version $version,
|
|
\Magento\Framework\App\PageCache\Kernel $kernel,
|
|
\Magento\Framework\App\State $state
|
|
) {
|
|
$this->config = $config;
|
|
$this->version = $version;
|
|
$this->kernel = $kernel;
|
|
$this->state = $state;
|
|
}
|
|
|
|
/**
|
|
* Add PageCache functionality to Dispatch method
|
|
*
|
|
* @param \Magento\Framework\App\FrontControllerInterface $subject
|
|
* @param callable $proceed
|
|
* @param \Magento\Framework\App\RequestInterface $request
|
|
* @return \Magento\Framework\Controller\ResultInterface|\Magento\Framework\App\Response\Http
|
|
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
|
|
*/
|
|
public function aroundDispatch(
|
|
\Magento\Framework\App\FrontControllerInterface $subject,
|
|
\Closure $proceed,
|
|
\Magento\Framework\App\RequestInterface $request
|
|
) {
|
|
$this->version->process();
|
|
if (!$this->config->isEnabled() || $this->config->getType() !== \Magento\PageCache\Model\Config::BUILT_IN) {
|
|
return $proceed($request);
|
|
}
|
|
$result = $this->kernel->load();
|
|
if ($result === false) {
|
|
$result = $proceed($request);
|
|
if ($result instanceof ResponseHttp && !$result instanceof NotCacheableInterface) {
|
|
$this->addDebugHeaders($result);
|
|
$this->kernel->process($result);
|
|
}
|
|
} else {
|
|
$this->addDebugHeader($result, 'X-Magento-Cache-Debug', 'HIT', true);
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Set cache control
|
|
*
|
|
* @param ResponseHttp $result
|
|
* @return ResponseHttp
|
|
*/
|
|
protected function addDebugHeaders(ResponseHttp $result)
|
|
{
|
|
$cacheControlHeader = $result->getHeader('Cache-Control');
|
|
if ($cacheControlHeader instanceof \Laminas\Http\Header\HeaderInterface) {
|
|
$this->addDebugHeader($result, 'X-Magento-Cache-Control', $cacheControlHeader->getFieldValue());
|
|
}
|
|
$this->addDebugHeader($result, 'X-Magento-Cache-Debug', 'MISS', true);
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Add additional header for debug purpose
|
|
*
|
|
* @param ResponseHttp $response
|
|
* @param string $name
|
|
* @param string $value
|
|
* @param bool $replace
|
|
* @return void
|
|
*/
|
|
protected function addDebugHeader(ResponseHttp $response, $name, $value, $replace = false)
|
|
{
|
|
if ($this->state->getMode() == \Magento\Framework\App\State::MODE_DEVELOPER) {
|
|
$response->setHeader($name, $value, $replace);
|
|
}
|
|
}
|
|
}
|