2

Zendフレームワークプロジェクトで、Cookieが設定されているかどうかを確認したいと思います。その場合は、Cookieの内容を使用してユーザーにログインします。

コントローラが呼び出される前にこの自動ログインを実行する必要があるため、ブートストラップに配置しようとしました。そこで、ユーザー情報が有効かどうかをデータベースで確認したいと思います。残念ながら、この時点では、デフォルトのデータベースアダプタはまだ初期化されていません。

だから私の質問は次のとおりです:コントローラーが呼び出される前、およびすべての初期化/ブートストラップが行われた後に実行する必要があるものをどこに置くのですか?

4

2 に答える 2

3

私はZendFrameworkの経験があまりありませんが、Zend_Controller_Actionを拡張してコードをpreDispatch()関数に配置するGenericControllerなどのカスタム汎用コントローラーを作成する必要があると思います。すべてのコントローラーは、カスタムコントローラーのサブクラスになります。次に例を示します。

class GenericController extends Zend_Controller_Action{
   function preDispatch(){
      parent::preDispatch();
      // put your code here
   }
}
class FooController extends GenericController{
...
}
于 2010-11-25T22:55:39.130 に答える
0

次の方法を使用します。

init()
// and
preDispatch()

それらをクラスに実装し、initは作成時に実行され、predispatchはアクションメソッドiircの直前に実行されます。

api

上にリンクしたそのページには、

注:init()とpreDispatch()の使用法前のセクションでは、init()メソッドを紹介し、このセクションでは、preDispatch()メソッドを紹介しました。それらの違いは何ですか、そしてあなたはそれぞれでどのような行動を取りますか?init()メソッドは、主にコンストラクターを拡張することを目的としています。通常、コンストラクターはオブジェクトの状態を設定するだけで、多くのロジックを実行する必要はありません。これには、コントローラーで使用されるリソース(モデル、構成オブジェクトなど)の初期化、またはフロントコントローラー、ブートストラップ、またはレジストリーから取得した値の割り当てが含まれる場合があります。preDispatch()メソッドを使用して、オブジェクトまたは環境(ビュー、アクションヘルパーなど)の状態を設定することもできますが、その主な目的は、要求されたアクションをディスパッチするかどうかを決定することです。そうでない場合は、次に、別のアクションに_forward()するか、例外をスローする必要があります。注:_forward()は、2つのメソッドの意図を形式化したinit()から実行すると、実際には正しく機能しません。

于 2010-11-25T22:53:28.483 に答える