2011-12-28 11 views
2

私はクライアントIDと一意のクライアントハッシュを持っています。これらのデータを登録すると、正常に動作します。 私はハッシュを生成しません。別の要素の値に基づいて要素を検証する方法は?

私はそのユニークなハッシュが既に存在するかどうかを検証するために使用するコード:

protected function _getValidator($field) 
{ 
    return array(
     'Db_NoRecordExists', 
     true, 
     array(
      'table' => 'anunciantes', 
      'field' => $field, 
      'messages' => array(
       'recordFound' => ucfirst($field) . ' "%value%" is registered' 
      ) 
     ) 
    ); 
} 

をしかし、私はそのクライアントを編集しなければならないとき、私はそのハッシュが既に存在するかどうかを検証したい、そしてそのハッシュがそれに属している場合クライアント。

私はどうしますか?私は既にdbバリデータの 'exclude'オプションを使用し、$this->getValue('id')を渡してIDの値を取得しようとしましたが、その呼び出しはnullを返します。

答えて

0

ハッシュが既に存在し、特定のユーザーに属しているかどうかを検証するには、カスタム除外条件で次のバリデータを使用できます。私は、ハッシュがデータベースからのハッシュを含む隠しテキストフィールドであると仮定します。

protected function _getEditValidator($field, $userId, $db = null) 
{ 
    if ($db == null) $db = Zend_Db_Table::getDefaultAdapter(); 

    array(
     'Db_RecordExists', 
     true, 
     array(
      'table' => 'anunciantes', 
      'field' => $field, 
      'exclude' => $db->quoteInto('user_id = ?', $userId) 
     ) 
    ); 
} 

これは、要素に含まれるハッシュはuser_idに属し、データベース内のハッシュと一致することを確認するためにチェックします。除外オプションをオーバーライドして、ハッシュ値が指定されたユーザーIDに設定されているものと一致するようにします。

問合せは、おおよそ次のようになります。

SELECT `users`.`db_hash_col` FROM `users` WHERE (`db_hash_col` = :value) AND (user_id = 1234) LIMIT 1 

あなたはユーザーを作成VSユーザーを編集するときにバリデータを交換するためにいくつかのロジックを使用する必要があります。

if ($editing) { 
    $this->getElement('hash') 
     ->setValidators(
      array($this->_getEditValidator('db_hash_col', 
              $this->getElement('id')->getValue()); 
} 

また、あなたの質問では$this->getValue('id')を使用して説明しました。私はこれが実際に$this->getElement('id')->getValue()であるべきだと思います。

希望に役立ちます。

0

あなたは...そのフィールドのようにフォームでバリデータをABBしている

$name->addValidator(
    'Db_NoRecordExists', 
    true, 
    array(
     'table' => 'currencies', 
     'field' => $field, 
     'messages' => array("recordFound" => "This Client Id already exists in our DB") , 
     'exclude' => array(
      'field' => 'id', 
      'value' => $this->_attribs['id'] 
     ) 
    ) 
); 
関連する問題