Magento 2:无法观察controller_action_predispatch_checkout_index_index

时间:2017-11-02 11:23:41

标签: magento magento2

我有一个标准的Observer设置,该模块不做任何其他事情。如果我更改了正在侦听controller_action_predispatch的事件,则Observer会正常激活。使用controller_action_predispatch_checkout_index_index而没有其他更改,它不会。

我正在查看M2分析器的输出;我可以看到两个事件都被解雇了。我唯一的线索是在同一事件上有另一个观察者(来自不同的模块)。我已经查看了这个观察者的来源,它似乎没有做任何重要的事情。 profiler screenshot

我还使用标准Psr\Log\LoggerInterface实例来检查Observer是否可以触发。

供应商/模块的/ etc / events.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="controller_action_predispatch_checkout_index_index">
        <observer name="vendor_module_requirelogin"
                  instance="Vendor\Module\Observer\RequireLogin" />
    </event>
</config>

供应商/模块/观察员/ RequireLogin.php

namespace Vendor\Module\Observer;

use Magento\Customer\Model\Session;
use Magento\Framework\App\ResponseFactory;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\UrlInterface;

class RequireLogin implements ObserverInterface
{
    protected $responseFactory;
    protected $session;
    protected $url;

    public function __construct(
        ResponseFactory $responseFactory,
        UrlInterface $url,
        Session $session
    ) {
        $this->responseFactory = $responseFactory;
        $this->url = $url;
        $this->session = $session;
    }

    public function execute(Observer $observer)
    {
        if (!$this->session->isLoggedIn()) {
            $url = $this->url->getUrl('customer/account/login');
            return $this->responseFactory->create()
                ->setRedirect($url)
                ->sendResponse();
        }
    }
}

0 个答案:

没有答案