0

私は最近 Web プログラミングを始めたばかりで、検証ライブラリを使用しているにもかかわらず、エラー メッセージとコールバック関数を数えずに、検証だけでも 20 ~ 30 行のコードが得られることに非常に驚いています。私は Kohana MVC フレームワークを使用していますが、検証コードを短縮できる方法はないかと考えていました。以下を考えてみました

  1. モデルに検証コードを入れます(これは私のような初心者にはかなりあります)。
  2. エントリを検証するための非常に小さなライブラリを作成します(検証クラスにフックするもので、ユーザー登録、編集などの繰り返しの手順のためにライブラリを呼び出すことができます)

または、より効率的で優れた方法はありますか?

4

3 に答える 3

2

検証コードがformsinitメソッドにある検証には、Zend_ValidateとZend_Formsを使用します。私がしなければならないのは、各要素のバリデーターの配列を渡してから実行することだけです。

$form->isValid($data);

...フォームの外でデータを検証します。

各配列エントリを改行で区切るため、検証配列は簡単に30行を超えます。しかし、要素ごとにきめ細かい検証ルールを定義すれば、それができると思います。

そして、Zendで新しいバリデーターを定義するのは本当に簡単です。

編集:ドメインオブジェクトに独自の検証を含めることができるZendFrameworkを拡張するフレームワークを発見しました。Xysterフレームワークと呼ばれていますが、最初の試行では動作させることができなかったため、その後は試行していません。

于 2009-09-14T04:33:35.563 に答える
2

モデルに検証を含めることを強くお勧めします。1 つを実行できるようになると、作成する他のすべてがはるかに簡単になります。さらに、そのデータを保存しようとするコントローラーが複数ある場合は、検証を再コーディングする必要はありません。Kohana のドキュメントには、検証ライブラリと ORM を統合するためのいくつかの例が含まれています。そこから開始する必要があります。

于 2009-09-16T03:28:31.083 に答える
0

検証コードを処理するための私の戦略は次のとおりです。「検証ライブラリ」とは、電子メールが電子メールであり、電話番号が数値であり、本質的にビジネスルールではないことを確認するものを意味すると思います。

アイデアは、各ビジネスルールコードをファンクターとして持つことです。PHPの場合は、文字列を使用して関数を定義するだけで取得できます。他の言語の場合、戦略パターンを使用する必要がある場合があります。ファンクターのインターフェースを定義し(PHPには必要ありません)、それを配列にダンプします。

成功、エラー、エラーコードをバッファに返す配列を実行します。最後に、エラーバッファを調べて、失敗した検証を特定します。ビューをカスタマイズするために使用します。

これが例です

$checkUniqueUserName = new CheckUniqueUserName();
$checkEmailNotUsed = new EmailNotUsed();
$validator = array();
$validator[$checkUniqueUserName->name()] = $checkUniqueUserName;
$validator[$checkEmailNotUsed->name()] = $checkEmailNotUsed;

$results = array();

foreach ($validator as $v)
{

  $result[$v->getValidatorName()] = $v->execute($userInfo);
}

class CheckUniqueUserName()
{

   public function execute($userInfo)
   {
       // SQL blah blah blah

      if ($bNameUnique)
        return array ('success' => 1)
      else
        return array ('success' => 0, 'error' => "$name is in used", 'error_code' => 'duplicate_name);

   }

}

最後に、それぞれが検証プロセスで満たされた結果配列が作成され、失敗したものと失敗したものがわかります。次に、これをクライアント側に渡して、失敗したフィールドを強調表示するなど、さらに処理することができます。error_codeは、適切なエラーメッセージとそれに適用されるフォーマットを検索するために使用されます。

ただし、コールバックの意味についてはよくわかりません。

于 2009-09-14T04:31:05.163 に答える