ホームページ >php教程 >php手册 >ZenTaoPHP フレームワークのデータ検証メカニズム

ZenTaoPHP フレームワークのデータ検証メカニズム

WBOY
WBOYオリジナル
2016-06-21 08:50:151316ブラウズ

プロジェクト内データ検証は、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() を実行すると、すべてのエラーがクリアされ、次回の実行には影響しません。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。