2011-10-21 7 views
1

Zend Framework:Zend_Validate_Db_RecordExistsと Zend_Validate_Db_NoRecordExistsを調べて、データベーステーブルの列をチェックして、フォーム内の値が名前付き列に表示されているかどうかを確認できます。Zend - バリデータを使ってZend_Formのユーザー名パスワードの組み合わせをチェックできますか?

同じ行の別の列の値に基づいて行を除外することもできます。

これらのバリデータを使用してパスワードがユーザ名と一致することを検証できますか?

これまでのところ、ユーザーが正しいユーザー名と正しいパスワード(ただし、このユーザー名のパスワードは必要ありません)を入力すると、フォームは入力を検証します。明らかに、ログインフォームまたはユーザー名/トークンのアクティベーションフォームの場合、トークンまたはパスワードは同じ行のユーザー名と一致する必要があります。

ありがとうございました。

$this->addElement('text', 'handle', array( 

    'label' => 'Username:', 

    'required' => true, 

    'filters' => array('StringTrim'), 

    'validators' => array( 

     array(

      'NotEmpty', true, array('messages' => 'You must enter your username.') 

     ), 

     array(

       'Db_RecordExists', 

       false, 

       array (

        'member_activation', 

        'member_username' 
        ) 

       ) 

     )   

    )); 

$this->addElement('text', 'validationCode', array( 

    'label' => 'Code:', 

    'required' => true, 

    'filters' => array('StringTrim'), 

    'validators' => array( 

     array(

      'NotEmpty', true, array('messages' => 'You must enter your validation code.') 

     ), 

     array(

       'Db_RecordExists', 

       false, 

       array (

        'member_activation', 

        'member_validationcode' 
        ) 

       ) 

     )   

    )); 
+0

ログインフォームですか?もしそうなら、この目的のために設計されたZend_AuthとZend_Auth_Adapter_DbTableを使わないでください。 –

+1

こんにちはTim。私がしようとしているのは、実際には、アカウントをアクティブにするためのユーザー名に対してトークンを検証するフォームです。ユーザーがアカウントを作成して電子メールで送信すると、トークンが作成されます。彼らはこのフォームに戻り、ユーザー名とアクティベーションコードを入力してアカウントを有効にします。トークンフィールドで検証をしないでフォームをコントローラに送信し、フォームにプレフィックスを付けるデコレータメッセージで検証を失敗すると、トークンフィールドでバリデータを使用しようとしていました。フィールド。ありがとう – 8bitjunkie

+1

ユーザーレコードを取得して手動でトークンを検証し、一致しない場合はフォームにエラーを追加する方が効率的です。 Db_RecordExistsを使用すると、必要でないように見えるトークン列をインデックス化しない限り、非効率になる可能性があります。そうしないと、カスタムバリデーターを作成する可能性があります。 – drew010

答えて

2

認証をZend_Validateに振りかけることができますか?絶対に?

する必要がありますか?地獄いいえ。

あなたがそうするなら、あなたは心配しています。 Zend_Validate_Db_RecordExistsは実際には境界線のようなものですが、便利です。

しかし、一度あなたが検討している道を行くと、ほとんどすべてが有効になります。あなたは、ACLチェックなど、さまざまなことを自分自身で行うことができます。

検証は、ほとんどの場合、物事の形式に関係している必要があります。データの永続性やACLシステムなどの依存関係を追加するだけで、結束度が高まります。これにより、コードのテスト、デバッグ、変更が難しくなります。

検証用にZend_Validateを使用します。弦が長すぎないようにしてください。これらのintが> = 0であることを確認してください。米国の電話番号が10桁であることを確認してください。

しかし、より深いチェックが必要な場合は、パーシスタンスレイヤーを掘り下げ、ビジネスロジックに関するすべてのことがわかるので、単純なフォームの検証から離れた方が良いでしょう。

+0

素晴らしい点。ありがとうございましたtimdev。 – 8bitjunkie

0

Zend_Formにバリデーションを適用すると、(ドメイン駆動設計の観点からは)ドメインロジックの一部を外部リソースに結合しているため、基礎となるフレームワークに依存するようになります。あなたの申請。