Magento - 从预派遣观察员转发到不同的控制器动作

7 magento

是否可以根据我在控制器预调度事件中检查的特定条件转发到不同的操作(在同一控制器内)?

例如 - 即将运行的动作就是索引

如果我为pre dispatch事件创建一个观察者,如果某个条件为真,我想运行一个不同的动作:myAction而不是indexAction

小智 8

您可以在预调度挂钩中执行以下方法.

public function yourMethod($observer)
{
    if ($condition) {
        $request = Mage::app()->getRequest();
        $request->initForward()
            ->setControllerName('controllername')
            ->setModuleName('modulename')
            ->setActionName('actionname')
            ->setDispatched(false);

        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您正在使用自定义控制器,为什么不总是将其路由到,例如,indexAction()?并且在该方法中找出你想要_forward()到下一个的地方,就像Kalpesh在他的回答中已经提到过的那样?表现明智没有区别.