2012-03-11 12 views
0

質問は、私は、同じコントローラ(indexController)でfooAction()loginAction()を持っているZend FrameworkののルータのsetDispatched()メソッド...setDispatched()の明確化

についてです。

私はActionHelperも持っていて、それはpreDispatch()メソッドを使用しています。この関数の終わりに、私は私がACLチェックifの文があります。だから、

public function preDispatch() { 

    // some code... 

    if (!$this->_acl->isAllowed($role, $resource, $privilege)) { 
     $request->setModuleName('default'); 
     $request->setControllerName('index'); 
     $request->setActionName('login'); 

     $request->setDispatched(false); //what does this mean exactly?? 
    } 
} 

私はfooAction()に到達したい、ユーザーが許可を得ていない、私は、ログイン「にアクション名を設定します'...

私の質問は次のとおりです。$request->setDispatched(false);はどういう意味ですか? (setDispatched();)

それはまだ発送されていないため、ZFは、LoginActionの()をディスパッチするために始めることができることを示していますか?

Zend Framework's Reference Guide

答えて

2

より:

各反復の開始時に、それは、アクションがディスパッチされたことを示すリクエスト オブジェクトにフラグを設定します。アクションまたは preまたはpostDispatchプラグインがそのフラグをリセットした場合、ディスパッチループは続行し、新しい要求のディスパッチを試みます( )。 コントローラーおよび/または要求内のアクションを変更し、ディスパッチされた フラグをリセットすることによって、開発者は実行する一連の要求を定義できます。

setDispatched(false)を呼び出すことによって、あなたは基本的にリクエストがまだコントローラに送信されなかったことを言っている、とDispatcherは、それを-派遣し直すしようとします。これは、要求のモジュール、コントローラー、およびアクションを変更していて、ディスパッチャーがそれを再度処理して適切な場所に送信するために必要です。