是的,您可以监听动态事件:
controller_action_predispatch_' . $this->getFullActionName()
或
controller_action_postdispatch_' . $this->getFullActionName()
你可以在app/code/core/Mage/Core/Controller/Varien/Action.php找到这些事件的调度
$this->getFullActionName() 方法返回一个由routeName_controllerName_actionName 组成的字符串,因此,假设您的 routeName 是 myadminroute,您的 controllerName 是 mycontroller 并且您的操作是 admin(就像您的代码一样),您可以在事件:
controller_action_predispatch_myadminroute_mycontroller_admin
和
controller_action_postdispatch_myadminroute_mycontroller_admin
如果您在管理区,您可以收听:
controller_action_predispatch_adminhtml_myadminroute_mycontroller_admin
和
controller_action_postdispatch_adminhtml_myadminroute_mycontroller_admin
在您的观察者类中,您可以通过以下方式检索动作控制器:
$observer->getControllerAction()
示例:
假设你在管理区:
<config>
...
<models>
<my_model_prefix>
<class>MyNamespace_MyModule_Model</class>
</my_model_prefix>
</models>
...
<events>
<controller_action_predispatch_adminhtml_myadminroute_mycontroller_admin>
<observers>
<my_event_unique_tag>
<type>singleton</type>
<class>my_model_prefix/observer</class>
<method>myObserverMethod</method>
</my_event_unique_tag>
</observers>
</controller_action_predispatch_adminhtml_myadminroute_mycontroller_admin>
</events>
...
</config>
在Model/Observer.php:
class MyNamespace_MyModule_Model_Observer
{
public function myObserverMethod($observer)
{
$controller = $observer->getControllerAction();
// do some stuff
}
}