1
イベントを聞くオブザーバーが<event name="controller_action_predispatch">
です。キャッシュが有効になっているときにCookie(Observer)が設定されていませんMagento 2.0.7
すべてのリクエストでオブザーバの実行メソッドが正しく実行されていますが、キャッシュが有効になっている場合はCookieが正しく設定されていません。 (System -> Cache Management -> Page Cache)
。
キャッシュを無効にすると、Cookieは期待どおりに設定されますが、商品リストページからカートにアイテムを追加するときは、右上のミニカートは空のままです。ミニカート内のアイテムを実際に見てチェックアウトできる唯一の方法は、最初にランダムな商品概要ページに移動してからカートに追加することです。何か案は?オブザーバー内部クッキーの設定
:
$cookieManager->setPublicCookie('Custom_Cookie', 'This is a Cookie');
Observerクラス:
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'));
...
}