1

これが私の問題です-アクション間でセッション名前空間にアクセスしようとしています。ZFの例は、新しい名前空間を生成することで機能するように見えますが、これは1つのアクション内でのみ示されます。ただし、別のアクションから既存の名前空間にアクセスするにはどうすればよいですか。コードは次のとおりです。

public function indexAction(){
    $defaultNamespace = new Zend_Session_Namespace('dingdangdoo');

    if (isset($defaultNamespace->numberOfPageRequests)) {
        // this will increment for each page load.
        $defaultNamespace->numberOfPageRequests++;
    } else {
        $defaultNamespace->numberOfPageRequests = 1; // first time
        }

    echo "Page requests this session: ",
    $defaultNamespace->numberOfPageRequests;
}

これは問題ありませんが、別のコントローラーとアクションのペアを作成する場合、$ defaultNamespace-> numberOfPageRequestsにアクセスするにはどうすればよいですか?Zendセッション名前空間の新しいインスタンスを作成する必要がありますか?

4

2 に答える 2

2

アプリケーション全体で使用する名前空間の単一のインスタンスを作成するか、アドホックに名前空間のインスタンスを作成するかは、実際にはあなた次第です。

Zend_Session_Namespace のインスタンスを作成するとき、実際に行っていることは、1 つの「名前空間」に固有の $_SESSION スーパーグローバルへの標準インターフェイスを取得することだけです。sueprglobal の「名前空間」は、$_SESSION 値の配列の単なる連想キーです。そのため、名前空間インスタンスを使用してデータを変更すると、その特定の名前空間を指す Zend_Session_Namespace のすべてのインスタンスで変更が可能になります。

私はすべてをシンプルに保つことを好むので、Zend_Controller_Action を拡張し、preDispatch メソッドで認証、承認、および一般的なセッション作成を処理します。次に、名前空間を My_Controller_Action のプロパティとして設定することで、すべてのアクションで使用できるようにします。

于 2009-11-06T11:44:44.360 に答える
0

私が従うアプローチは、ブートストラップで名前空間を設定して、アプリケーション全体で使用できるようにすることです。必要なコントローラー/アクションからアクセスできます。

于 2010-12-19T20:20:46.370 に答える