プロジェクト内データ検証は、Web アプリケーションでは特に重要です。 ZenTaoPHP フレームワークのデータ検証メカニズムを紹介します。
1. まず、質問、つまり検証ルールをどこに配置するかを決めましょう。
mvc プログラムでは、各層に検証ルールを配置できます。たとえば、多くのフォーム検証では、ユーザーの入力が自動的に検証され、プロンプトが表示されます。では、データ検証はどこに配置されるのでしょうか?この問題については、インターネット上で多くの議論が巻き起こっています。主にビュー レイヤに配置する人もいれば、コントロール レイヤに配置することを主張する人もいます。 ZenTao フレームワークはモデル レイヤーを選択しました。
なぜこんなことをするのですか?モデル層は最下位層であるため、すべてのデータ操作はモデルを通じて処理される必要があります。したがって、このレベルでデータ検証が適切に行われている限り、データの正確性と安全性は保証されます。もちろん、フレームワークのユーザーは同時にフロントエンドに js 検証を追加することができ、モデル層の検証と競合することはありません。 ZenTao のデータ フィルタリング メカニズムの使用方法を見てみましょう。
ZenTao のデータフィルタリングは 2 つの部分に分かれており、1 つはデータ修正、もう 1 つはデータ検証です。これは、PHP のフィルター拡張機能からインスピレーションを得たもので、次の 2 つの部分に分かれています。まずはデータ修正の例を見てみましょう:
2. データ修正:
$bug = fixer::input('post')
->add('openedBy', $this->app->user->account)
->add('openedDate', $now)
->setDefault('プロジェクト,ストーリー,タスク', 0)
->setDefault('openedBuild', '')
->setIF($this->post->assignedTo != '', 'assignedDate', $now)
->setIF($this->post->ストーリー != false, 'storyVersion', $this->loadModel('story')->getVersion($this-> post->ストーリー))
->specialChars('タイトル,ステップ,キーワード')
->cleanInt('製品、モジュール、重大度')
->join('openedBuild', ',')
->remove('ファイル、ラベル')
->get();
まず、fixer クラスの input メソッドを呼び出します。そのパラメータ post は、$_POST 変数からデータを取得することを意味します。
add() の次の 2 行は、2 つの変数をデータに追加します。次の 2 行の setDefault は、この変数に値が渡されない場合、デフォルト値に設定されることを意味します。
次は setIF の 2 行です。 setIFには3つのパラメータがあり、最初のパラメータは判定条件、最後の2つのパラメータはkeyとvalueです。つまり、条件が true の場合、$key = $value を設定します。
次の特殊文字は、これら 3 つのフィールドの htmlspecialchars 処理を意味します
最後に、不要な 2 つの変数を削除し、remove を使用する必要があります。
get メソッドを使用して、完全に変更されたデータ コレクションを取得できます。このコレクションは保管する準備ができています。データがどのように検証されるかを見てみましょう。
3. データチェック
この SQL 挿入ステートメントは、data メソッドを通じて修正されたデータを dao オブジェクトに渡し、autoCheck() を通じて自動的にチェックします。 autoCheck は、データベース内のフィールドのタイプと長さに基づいて判断します。タイプが間違っている場合、または長さが間違っている場合は、エラーが自動的に記録されます。次に、batchCheck() メソッドが後で呼び出され、フィールドのバッチが空でないことを確認します。もちろん、check() メソッドを使用して単一のフィールドを検証することもできます。
if(dao::isError()) die(js::error(dao::getError())); はい、それです。dao::isError() の場合は、getError() メソッドを実行します。それを js 文字列にマージし、アラート ボックスの形式でポップアップ表示します。 getError() を実行すると、すべてのエラーがクリアされ、次回の実行には影響しません。