BuiltinPlugin.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\PageCache\Model\App\FrontController;
  7. use Magento\Framework\App\Response\Http as ResponseHttp;
  8. /**
  9. * Plugin for processing builtin cache
  10. */
  11. class BuiltinPlugin
  12. {
  13. /**
  14. * @var \Magento\Framework\App\Config\ScopeConfigInterface
  15. */
  16. protected $config;
  17. /**
  18. * @var \Magento\Framework\App\PageCache\Version
  19. */
  20. protected $version;
  21. /**
  22. * @var \Magento\Framework\App\PageCache\Kernel
  23. */
  24. protected $kernel;
  25. /**
  26. * @var \Magento\Framework\App\State
  27. */
  28. protected $state;
  29. /**
  30. * Constructor
  31. *
  32. * @param \Magento\PageCache\Model\Config $config
  33. * @param \Magento\Framework\App\PageCache\Version $version
  34. * @param \Magento\Framework\App\PageCache\Kernel $kernel
  35. * @param \Magento\Framework\App\State $state
  36. */
  37. public function __construct(
  38. \Magento\PageCache\Model\Config $config,
  39. \Magento\Framework\App\PageCache\Version $version,
  40. \Magento\Framework\App\PageCache\Kernel $kernel,
  41. \Magento\Framework\App\State $state
  42. ) {
  43. $this->config = $config;
  44. $this->version = $version;
  45. $this->kernel = $kernel;
  46. $this->state = $state;
  47. }
  48. /**
  49. * @param \Magento\Framework\App\FrontControllerInterface $subject
  50. * @param callable $proceed
  51. * @param \Magento\Framework\App\RequestInterface $request
  52. * @return \Magento\Framework\Controller\ResultInterface|\Magento\Framework\App\Response\Http
  53. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  54. */
  55. public function aroundDispatch(
  56. \Magento\Framework\App\FrontControllerInterface $subject,
  57. \Closure $proceed,
  58. \Magento\Framework\App\RequestInterface $request
  59. ) {
  60. $this->version->process();
  61. if (!$this->config->isEnabled() || $this->config->getType() != \Magento\PageCache\Model\Config::BUILT_IN) {
  62. return $proceed($request);
  63. }
  64. $result = $this->kernel->load();
  65. if ($result === false) {
  66. $result = $proceed($request);
  67. if ($result instanceof ResponseHttp) {
  68. $this->addDebugHeaders($result);
  69. $this->kernel->process($result);
  70. }
  71. } else {
  72. $this->addDebugHeader($result, 'X-Magento-Cache-Debug', 'HIT', true);
  73. }
  74. return $result;
  75. }
  76. /**
  77. * Set cache control
  78. *
  79. * @param ResponseHttp $result
  80. * @return ResponseHttp
  81. */
  82. protected function addDebugHeaders(ResponseHttp $result)
  83. {
  84. $cacheControlHeader = $result->getHeader('Cache-Control');
  85. if ($cacheControlHeader instanceof \Zend\Http\Header\HeaderInterface) {
  86. $this->addDebugHeader($result, 'X-Magento-Cache-Control', $cacheControlHeader->getFieldValue());
  87. }
  88. $this->addDebugHeader($result, 'X-Magento-Cache-Debug', 'MISS', true);
  89. return $result;
  90. }
  91. /**
  92. * Add additional header for debug purpose
  93. *
  94. * @param ResponseHttp $response
  95. * @param string $name
  96. * @param string $value
  97. * @param bool $replace
  98. * @return void
  99. */
  100. protected function addDebugHeader(ResponseHttp $response, $name, $value, $replace = false)
  101. {
  102. if ($this->state->getMode() == \Magento\Framework\App\State::MODE_DEVELOPER) {
  103. $response->setHeader($name, $value, $replace);
  104. }
  105. }
  106. }