0

このコードがタイムアウトする、またはアクションヘルパーpreDispatch()関数またはプラグインpreDispatch()関数で機能しない理由はありますか?

$request =$this->getActionController->getRequest();
$request->setModuleName('default');
$request->setControllerName('auth');
$request->setActionName('login');
$request->setDispatched(false);

ゲストユーザーがログインプロンプトに送信されるように、Zend_Acl redirection\forwardを実装しようとしています。この特定のコードスニペットに到達するまではすべて正常に機能し、その後タイムアウトになります。私は、Zend_AuthとZend_Aclの実装について、彼の著書「ZendFrameworksinAction」の@RobAllensの例に従っていました。問題は、このコードスニペットだけにあります。アクションヘルパークラスとプラグインクラスの両方で同じタイムアウトエラーで試しました。action method()で正常に動作します。

4

1 に答える 1

1

設定しているのでsetDispatched(false)、(私は)アクションヘルパーがログインメソッドに対して再初期化され、ACLチェックが再度実行されます。条件がもう一度失敗するため、ZFは再びログインメソッドへの内部リダイレクトを実行し、プロセスが繰り返されます(したがって無限ループ)。最も簡単な修正は、ログインメソッド自体のチェックが実行されないように条件を追加することです。

if (!$this->_acl->isAllowed($role, $resource, $priv) && $request->getActionName() != 'login') {
    [...]
}

これが機能しない場合は、setDispatchedチェックをコメントアウトすることで違いが生じるかどうかを確認してください。

于 2012-11-06T22:30:37.783 に答える