2011-12-28 4 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 validator의 '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에 설정된 값과 일치해야하도록 exclude 옵션을 재정의합니다.

쿼리는 다음과 같이 대략 같아야합니다

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

당신은 사용자를 생성 대 사용자를 편집 할 때 유효성 검사기를 교환하기 위해 몇 가지 논리를 사용해야합니다. 다음과 같이 설정할 수 있습니다.

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'] 
     ) 
    ) 
);