У меня есть наблюдатель, который слушает <event name="controller_action_predispatch">
событий.Cookies (Observer) не установлены, когда включен кеш Magento 2.0.7
Метод выполнения наблюдателя корректно работает на каждом запросе, но Cookies установлены неправильно, когда включено кеширование, более конкретный полный кэш страницы. (System -> Cache Management -> Page Cache)
.
Теперь, когда я отключу кеш, файлы cookie устанавливаются так, как ожидалось, но мини-тележка в правом верхнем углу остается пустой при добавлении элементов в корзину со страницы списка продуктов. Единственный способ увидеть элементы в мини-тележке и получить возможность проверки - сначала перейти на страницу просмотра случайных продуктов, а затем добавить ее в корзину. Есть идеи?
Настройка Cookies внутри наблюдателя:
$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'));
...
}