1

検証後にエラーが発生した場合は入力コントローラーに戻り、エラーがなければ成功コントローラーを続行します。

ZF1 では、preDispatch() での転送が次のような呼び出されたアクションを実行しないため、これを行うことができました。

public function preDispatch()
{
    parent::preDispatch();
    if ($action == 'success' && $this->validate() === false) {
        $this->_forward('input');
    }
}

public function successAction()
{
}

public function inputAction()
{
}

ZF2 では、エラーが発生した場合にディスパッチと転送に検証を添付しようとしていますが、ZF2 は引き続き実行されるため、inputAction と successAction の両方が呼び出されます。

$events->attach('dispatch', function (MvcEvent $e) use ($controller) {
    $result = $this->validate($controller);
    if ($result->isValid() === false) {
        $callingClassName = get_class($this);
        $test = $controller->forward()->dispatch($callingClassName, array('action' => 'input'));
    }
}

これに対する解決策はありますか?転送後に実行を停止したいだけです...

successAction で ViewModel を返すと読み取りが停止することはわかっていますが、一般的に使用できるようにしたいと考えています。

4

1 に答える 1

3

私はあなたが探していると思います

$e->stopPropagation();

これにより、それ以上のイベントの伝播が停止します。

于 2013-03-12T11:56:51.780 に答える