私は、、、、およびを OOP 構造にラップするのが好きです$_SESSION
。$_POST
$_GET
$_COOKIE
私はこの方法を使用して、サニテーションと検証、必要なすべてのisset ()
チェック、ノンス、setcookie
パラメーターなどを処理するコードを一元化します。また、クライアント コードをより読みやすくすることができます (そして、より保守しやすいという錯覚を与えます)。
特に複数のコーダーがいる場合、この種の構造の使用を強制するのは難しいかもしれません。$_GET
、$_POST
、および(と私は信じています) を使用$_COOKIE
すると、初期化コードでデータをコピーしてから、スーパーグローバルを破棄できます。私は試していませんが、巧妙なデストラクタが $_SESSION (ロード時に $_SESSION を消去し、デストラクタに書き戻す) でこれを可能にする可能性があります。
ただし、通常、これらの強制手法は使用しません。慣れてくると$_SESSION
、セッションクラス以外のコードを見ると変な感じになってしまい、ほとんどソロで作業しています。
編集
誰かに役立つ場合に備えて、サンプルクライアントコードを次に示します。主要なフレームワークのいずれかを見ると、より良いアイデアが得られると確信しています...
$post = Post::load ();
$post->numeric ('member_age');
$post->email ('member_email');
$post->match ('/regex/','member_field');
$post->required ('member_first_name','member_email');
$post->inSet ('member_status',array('unemployed','retired','part-time','full-time'));
$post->money ('member_salary');
$post->register ('member_last_name'); // no specific requirements, but we want access
if ($post->isValid())
{
// do good stuff
$firstName = $post->member_first_name;
}
else
{
// do error stuff
}
Post とその仲間はすべて、コア検証コードを実装する基本クラスから派生し、フォーム トークン、セッション Cookie 構成などの独自の特定の機能を追加します。
内部的には、クラスは検証メソッドが呼び出されたときに抽出された有効なデータのコレクションを保持し、魔法のメソッド$_POST
を使用してそれらをプロパティとして返します。__get
失敗したフィールドには、この方法ではアクセスできません。私のバリデーション メソッド ( を除くrequired
) は、空のフィールドで失敗することはありません。それらの多くはfunc_get_args
、一度に複数のフィールドを操作できるようにするために使用します。一部のメソッド ( などmoney
) は、データをカスタム値の型に自動的に変換します。
エラーの場合、データをセッションに保存できる形式に変換し、フォームに事前入力し、元のフォームにリダイレクトした後にエラーを強調表示するために使用する方法があります。
これを改善する 1 つの方法は、フォームのレンダリングに使用される Form クラスに検証情報を格納し、クライアント側の検証を強化し、送信後にデータをクリーニングすることです。