0

私は新しいWebアプリで1か月ほど働いています。すべてのフロントエンドコーディングと一部のバックエンドを実行している間、開発者が多くのバックエンド作業に取り組んでいます。アプリケーションはZendFrameworkを使用しています。彼の選択の多くが最適ではないとわかったので、私は今、彼のコードを調べて調べています。私が気付いたいくつかの重要なことは、彼が多くのコントローラーでセッションオブジェクトをインスタンス化することです。

$session     = new Zend_Session_Namespace('crSession');

これは、いくつかの異なるコントローラーのさまざまな方法で発生します。これは良い習慣ですか?一度だけ必要なのではないでしょうか?レベルなどのないシンプルなユーザー認証システムがあります。

第二に、彼はたくさんの場所で設定ファイルを取得しています。時々そう:

$config    = Zend_Registry::get('config');

またはこれ

$config  = new Zend_Config_Ini(APPLICATION_PATH.'/configs/application.ini', 'production');

これを変更したり、開発に変更したりする場合は、10個のファイルを変更する必要があるため、これは頭がおかしくなります。コントローラーとモデルの両方で複数のメソッド内で発生する上記のインスタンス化が必要になるシナリオはありますか?

ご協力いただきありがとうございます。

4

1 に答える 1

2

を使用してコントローラーでセッションがインスタンス化される方法に問題はありませんZend_Session_Namespace。アプリケーションがブートストラップでセッションを開始しない場合は、新しいを作成することで、アプリケーションの他の場所からセッションを開始できますZend_Session_Namespace

新しいものを開始するときに追加のオーバーヘッドが発生するためZend_Session(呼び出されるだけsession_start()ではありません)、アプリケーションのすべてのページにアクティブなセッションが必要ない場合は、ブートストラップまたはプラグインでグローバルにセッションを開始しないようにすることを検討できます。 。この場合、コントローラーが行っているようにセッションを開始することは問題ないので、それは悪い習慣ではないと思います。

セッションブートストラップレベルで開始されたが、特定のセッションデータを他のデータから分離する必要がある場合、または特定の時間に期限切れになる必要があるか、非常に多くのホップでのみ使用可能であるためZend_Session_Namespace、個別に使用することもできます。コントローラー。

設定の取得に関しては、使用に問題はありません。

$config = Zend_Registry::get('config');

アプリケーション全体。ブートストラップでは、構成ファイルがオブジェクトまたは配列に解析されてから、グローバルアクセスのためにレジストリに配置されると思います。ブートストラップが正しい構成(本番、開発)を使用して構成をロードしたと仮定すると、これはおそらく、アプリケーションの他の部分で構成を使用できるようにする最も簡単な方法です。

ただし、指摘した2番目の方法(フルパスとハードコードされた本番値を使用して構成を再解析する)はおそらく適切ではないことに同意します。私の意見では、これらのインスタンスはすべて以前のコードに置き換える必要があります(アプリケーションが現在どのように実行されているかに関係なく、本番構成から特定の値が必要な特別な理由がない限り)。

于 2012-08-04T17:38:55.653 に答える