У меня есть наблюдатель, который прослушивает <event name="controller_action_predispatch">
события.
Метод выполнения наблюдателя правильно выполняется для каждого запроса, но файлы cookie не устанавливаются правильно при включенном кэшировании, точнее, в полностраничном кэше.(System -> Cache Management -> Page Cache)
.
Теперь, когда я отключаю кеш, файлы cookie устанавливаются, как и ожидалось, но мини-корзина в правом верхнем углу остается пустой при добавлении товаров в корзину со страницы списка товаров. Единственный способ увидеть товары в мини-корзине и оформить заказ — это сначала перейти на случайную страницу обзора продукта, а затем добавить его в корзину оттуда. Любые идеи?
Установка куки внутри наблюдателя:
$cookieManager->setPublicCookie('Custom_Cookie', 'This is a Cookie');
Класс наблюдателя:
class MyObserver implements ObserverInterface {
protected $messageManager;
protected $cart;
protected $scopeConfig;
protected $logger;
public function __construct(
\Magento\Framework\Message\ManagerInterface $messageManager,
\Magento\Checkout\Model\Cart $cart,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Psr\Log\LoggerInterface $logger
) {
$this->messageManager = $messageManager;
$this->cart = $cart;
$this->scopeConfig = $scopeConfig;
$this->logger = $logger;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cookieManager = $objectManager->get('Magento\Framework\Stdlib\CookieManagerInterface');
$customer = $objectManager->create('Magento\Customer\Model\Customer');
$product = $objectManager->create('Magento\Catalog\Model\Product');
$cart = $objectManager->get('Magento\Checkout\Model\Cart');
$customerSession = $objectManager->get('Magento\Customer\Model\Session');
// COOKIE
$cookieManager->setPublicCookie('Custom_Cookie', 'This is a Cookie');
$this->logger->info('COOKIE IS ==> ' . $cookieManager->getCookie('Custom_Cookie'));
...
}