Добавить события до / после действия контроллера в Magento - PullRequest
12 голосов
/ 22 сентября 2011

У меня есть контроллер в Magento как показано ниже:

#File: ./app/local/FilFact/Test/IndexController
class FilFact_Test_IndexController extends Mage_Core_Controller_Front_Action{
    public function indexAction(){
        $this->_testConfig();
    }
}

Мне нужно добавить два события для:
before index action
after index action

Как я мог это сделать?

1 Ответ

38 голосов
/ 22 сентября 2011

Это просто, поскольку базовый класс Mage_Core_Controller_Varien_Action предоставляет события до / после отправки.

Если вы откроете класс Mage_Core_Controller_Varien_Action, вы найдете два метода: preDispatch () и postDispatch ()

Этот метод выполняет несколько задач и, что наиболее важно, запускает три события.

controller_action_(pre|post)dispatch
controller_action_(pre|post)dispatch_{{routeName}}
controller_action_(pre|post)dispatch_{{fullActionName}}

fullActionName - это имя маршрута, имя контроллера и имя действия, разделенные «_» и строчными буквами. (См. Mage_Core_Controller_Varien_Action :: getFullActionName для справки)

/ приложение / код / ​​местные / FilFact / Test / и т.д. / config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <FilFact_Test>
            <version>1.0.0</version>
        <FilFact_Test>
    </modules>
    <global>
        <models>
            <FilFact_Test>
                <class>FilFact_Test_Model</class>
            </FilFact_Test>
        </models>
    </global>
    <frontend>
        <routers>
            <filfact>
                <use>standard</use>
                <args>
                    <module>FilFact_Test</module>
                    <frontName>filfact</frontName>
                </args>
            </filfact>
        </routers>
        <events>
            <controller_action_predispatch_filfact_index_index>
                <observers>
                    <FilFact_Test>
                        <class>FilFact_Test/Observer</class>
                        <method>indexPreDispatch</method>
                    </FilFact_Test>
                </observers>
            </controller_action_predispatch_filfact_index_index>
            <controller_action_postdispatch_filfact_index_index>
                <observers>
                    <FilFact_Test>
                        <class>FilFact_Test/Observer</class>
                        <method>indexPostDispatch</method>
                    </FilFact_Test>
                </observers>
            </controller_action_postdispatch_filfact_index_index>
        </events>
    </frontend>
</config>

/ приложение / код / ​​местные / FilFact / Тест / модель / Observer.php

<?php
class FilFact_Test_Model_Observer
{
    public function indexPreDispatch(Varien_Event_Observer $observer)
    {
       // TODO: Your code
    }

    public function indexPostDispatch(Varien_Event_Observer $observer)
    {
       // TODO: Your code
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...