1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <?php
- /**
- * PageCache controller
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\PageCache\Controller;
- use Magento\Framework\Serialize\Serializer\Base64Json;
- use Magento\Framework\Serialize\Serializer\Json;
- use Magento\Framework\View\Layout\LayoutCacheKeyInterface;
- abstract class Block extends \Magento\Framework\App\Action\Action
- {
- /**
- * @var \Magento\Framework\Translate\InlineInterface
- */
- protected $translateInline;
- /**
- * @var Json
- */
- private $jsonSerializer;
- /**
- * @var Base64Json
- */
- private $base64jsonSerializer;
- /**
- * Layout cache keys to be able to generate different cache id for same handles
- *
- * @var LayoutCacheKeyInterface
- */
- private $layoutCacheKey;
- /**
- * @var string
- */
- private $layoutCacheKeyName = 'mage_pagecache';
- /**
- * @param \Magento\Framework\App\Action\Context $context
- * @param \Magento\Framework\Translate\InlineInterface $translateInline
- * @param Json $jsonSerializer
- * @param Base64Json $base64jsonSerializer
- * @param LayoutCacheKeyInterface $layoutCacheKey
- */
- public function __construct(
- \Magento\Framework\App\Action\Context $context,
- \Magento\Framework\Translate\InlineInterface $translateInline,
- Json $jsonSerializer = null,
- Base64Json $base64jsonSerializer = null,
- LayoutCacheKeyInterface $layoutCacheKey = null
- ) {
- parent::__construct($context);
- $this->translateInline = $translateInline;
- $this->jsonSerializer = $jsonSerializer
- ?: \Magento\Framework\App\ObjectManager::getInstance()->get(Json::class);
- $this->base64jsonSerializer = $base64jsonSerializer
- ?: \Magento\Framework\App\ObjectManager::getInstance()->get(Base64Json::class);
- $this->layoutCacheKey = $layoutCacheKey
- ?: \Magento\Framework\App\ObjectManager::getInstance()->get(LayoutCacheKeyInterface::class);
- }
- /**
- * Get blocks from layout by handles
- *
- * @return array [\Element\BlockInterface]
- */
- protected function _getBlocks()
- {
- $blocks = $this->getRequest()->getParam('blocks', '');
- $handles = $this->getRequest()->getParam('handles', '');
- if (!$handles || !$blocks) {
- return [];
- }
- $blocks = $this->jsonSerializer->unserialize($blocks);
- $handles = $this->base64jsonSerializer->unserialize($handles);
- $layout = $this->_view->getLayout();
- $this->layoutCacheKey->addCacheKeys($this->layoutCacheKeyName);
- $this->_view->loadLayout($handles, true, true, false);
- $data = [];
- foreach ($blocks as $blockName) {
- $blockInstance = $layout->getBlock($blockName);
- if (is_object($blockInstance)) {
- $data[$blockName] = $blockInstance;
- }
- }
- return $data;
- }
- }
|