コントローラーのディスパッチ前イベントで確認できる特定の条件に基づいて、(同じコントローラー内の) 別のアクションに転送することは可能ですか?
たとえば、実行しようとしているアクションは、インデックスと言う
ディスパッチ前イベントのオブザーバーを作成する場合、特定の条件が真の場合、別のアクションを実行したいと思います: indexAction ではなく myAction
コントローラーのディスパッチ前イベントで確認できる特定の条件に基づいて、(同じコントローラー内の) 別のアクションに転送することは可能ですか?
たとえば、実行しようとしているアクションは、インデックスと言う
ディスパッチ前イベントのオブザーバーを作成する場合、特定の条件が真の場合、別のアクションを実行したいと思います: indexAction ではなく myAction
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() を次にどこに移動したいかを見つけますか? パフォーマンスに関しては、違いはありません。