7

コントローラーのディスパッチ前イベントで確認できる特定の条件に基づいて、(同じコントローラー内の) 別のアクションに転送することは可能ですか?

たとえば、実行しようとしているアクションは、インデックスと言う

ディスパッチ前イベントのオブザーバーを作成する場合、特定の条件が真の場合、別のアクションを実行したいと思います: indexAction ではなく myAction

4

1 に答える 1

8

pre-dispatch フック内で次のメソッドのように何かを行うことができます。

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

        return false;
    }
}

ただし、カスタム コントローラを使用している場合、たとえば indexAction() などに常にルーティングしないのはなぜでしょうか? そして、そのメソッド内で、Kalpesh がすでに彼の回答で述べたように、_forward() を次にどこに移動したいかを見つけますか? パフォーマンスに関しては、違いはありません。

于 2012-07-21T16:23:58.410 に答える