私はセッション、MVCデザイン、オブジェクト指向PHPを扱ってきました。セッションからデータをどこに保存または取得する必要がありますか?メソッド内から取得したいので、データをメソッドに渡す必要はありません。ベストプラクティスは何ですか?
5 に答える
私は通常、これをコントローラーの中に入れます。それは理にかなっています..コントローラーは、何が起こるかを決定し、要求されたアクションを人々が実行できるかどうかを決定させない理由を決定します。通常、MVC システムには複数のコントローラーがあります。例えば。BaseController (抽象 - 共通)、NonSessionController は BaseController を拡張します (例: 静的ページに使用)、SessionController は BaseController を拡張します (ここで処理するプライマリ セッション - これは抽象的である可能性があります)。たとえば、さまざまなユーザー タイプがある場合、このコントローラーを次のようにポリモーフィングすることができます: AdminController、UserController など。
個人的には、 Zend_Sessionラッパー クラスの大ファンです。私はオブジェクト指向スタイルでデータを操作することを好み、ラッパーを使用することによる名前空間の利点は大きな利点です。
これらのうちどれがあなたに似合いますか?
$_SESSION['Zend_Auth']['user'] = "myusername";
また
$authNamespace = new Zend_Session_Namespace('Zend_Auth');
$authNamespace->user = "myusername";
アクセサーを使用した場合の外観の方が好みです。
注: MVC システムでは、どの方法を選択しても、常にコントローラーでセッション データを取得/設定する必要があります。
静的ラッパークラスを使用して処理するなど、いくつかの方法を試しましたが、常にスーパーグローバル配列を単独で使用することに戻ります。私は今でも認証チェックやその他の反復的なタスクにラッパーを使用していますが、最終的には、ストック設定を使用する方が簡単で冗長性が低くなります。
取得したデータが使用される範囲に依存すると思います。メソッド内でのみ使用される場合は、外部で取得する必要があり、セッションはスーパーグローバル変数で常に利用可能であり、必要な場合にのみローカライズすることをお勧めします.
私はセッションラッパーを気にしません。制限に値するほどの利益は得られません。スーパーグローバルを通過すると、必要なあらゆる種類の (できれば正常な) データ構造を使用できます。セッション データは常に 2 レベル以上の配列データになってしまい、セッション ラッパーで管理するには面倒です。
スーパーグローバルは、PHP がsave handlerを使用してセッション データをデータベースに保存することを制限しません。これは、スケーラビリティにとって非常に優れています。