Model view controller 为Magento中控制器的操作之前/之后添加事件

Model view controller 为Magento中控制器的操作之前/之后添加事件,model-view-controller,zend-framework,magento,Model View Controller,Zend Framework,Magento,我在Magento有一个控制器,如下所示: #File: ./app/local/FilFact/Test/IndexController class FilFact_Test_IndexController extends Mage_Core_Controller_Front_Action{ public function indexAction(){ $this->_testConfig(); } } 我需要为添加两个事件: 在之前索引操作 在之后索引

我在Magento有一个控制器,如下所示:

#File: ./app/local/FilFact/Test/IndexController
class FilFact_Test_IndexController extends Mage_Core_Controller_Front_Action{
    public function indexAction(){
        $this->_testConfig();
    }
}
我需要为添加两个事件:
之前
索引操作

之后
索引操作


我该怎么做呢?

这很简单,因为Mage\u Core\u Controller\u Varien\u Action基类提供调度前/调度后事件

如果你打开Mage_Core_Controller_Varien_Action类,你会发现两种方法:和

这些方法执行一些任务,最重要的是触发三个事件

controller_action_(pre|post)dispatch
controller_action_(pre|post)dispatch_{{routeName}}
controller_action_(pre|post)dispatch_{{fullActionName}}
fullActionName是路由名称、控制器名称和操作名称,由“\”和所有小写字母分隔。(请参阅以供参考)

/app/code/local/FilFact/Test/etc/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>

1.0.0
FilFact\u测试\u模型
标准
菲卢试验
费尔法特
FilFact_测试/观察者
indexPreDispatch
FilFact_测试/观察者
不定期派送
/app/code/local/FilFact/Test/Model/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
    }
}

我会试试看。:)喜欢你的答案。你想提供这两个事件,以便其他模块可以连接到它们,是吗?是的,我使用这样的方式:添加语句:
Mage::dispatchEvent('test_index_index_index_before_action',$data)在索引操作中。但这并不好。下面的答案更好。