2012-02-28 1 views
0

사용자 맵퍼 클래스 userExist($username)에 하나의 함수를 작성했습니다. 동일한 사용자 이름이 데이터베이스 테이블에없는 경우 return true입니다. 이제 Zend_Form을 확장 한 Add_User_Form 클래스에서이 함수를 사용하고 싶습니다.젠드 양식 검사기 콜백 : 사용자 이름을 제외하는 방법?

내가 사용하려는 :

$username = $this->createElement('text','username'); 
$username->setLabel('Username:') 
     ->addValidator('Callback', true, array('callback'=>userExist???)); 

내가 콜백 함수로 매퍼 클래스 userExist($username) 기능을 사용할 수 있습니까? 구현에 문제가 있다면 알려주십시오. 사용자가 이미 등록되어 있고 양식 제출을 막는 경우 오류 메시지 만 표시하려고합니다.

감사합니다.

$element->addValidator('Db_NoRecordExists', true, array('users', 'username')) 

Db_NoRecordExists 당신이 기록은 데이터베이스의 특정 테이블에 존재하는지 여부를 확인할 수 있습니다 :

답변

2

대신 콜백 유효성 검사기를 사용하여, 당신은 표준 검증를 사용할 수 있습니다.

사용자가 자신의 프로필을 편집하려면 ( 제외) 레코드가 존재하는지 확인해야 할 수 있습니다. 그런 다음 다음과 같은 유효성 검사기를 사용한다 :이 예에서

$where = array('users', 'username', array('field' => 'username', 'value' => $username)); 
$element->addValidator('Db_NoRecordExists', true, $where) 

users는 데이터베이스 테이블의 이름입니다. username은 열 이름이고 $username은 제외 할 사용자 이름입니다.

+0

안녕하세요 @ 리야 리 저는 젠드 폼 추상을 확장 한 클래스 안에 있습니다. 그 값 $ username을 어떻게 얻을 수 있습니까? 어리석은 질문이라면 미안 해요. –

+0

무엇을 의미합니까? 나는 당신이 Zend_Form에 대해 이야기하고 있다고 생각합니다. '$ username'은 단순히 현재 사용자의 사용자 이름입니다. 생성자를 사용하여 양식에 전달할 수 있습니다. 사용자 존재 여부를 확인하려는 경우이 옵션을 사용할 필요가 없습니다. – Liyali

+0

새 사용자를 추가하고 있습니다. 확인. 나는 ($ form-> isValid ($ request-> getPost()) 경우에만 사용된다.)이 isvalid 메서드는 모두를 처리한다. 그래서 어떻게 사용자 폼 클래스를 추가하는 사용자 이름 값을 입력 할 수 있습니다.$ this-> getValue ('username')를 사용하여 얻을 수 있습니까? –

1

조금 늦었지만 가능한 답변 일 수 있습니다.

날짜 요소 예 :

나는 같은 폼 클래스의 메소드를 호출하는 사용자 정의 콜백 검증과 날짜 요소를 만들었습니다. 당신이 그것을 사용자 지정 유효성 검사기와 함께 자신의 클래스가있는 경우

// Date picker from 
$datePickerFrom = new Zend_Form_Element_Text('date_picker_from_date'); 
$datePickerFrom->setRequired(true) 
    ->setDecorators($this->elementDecorators) 
    ->setLabel('Valid From') 
    ->addFilter('StripTags') 
    ->addFilter('StringTrim') 
    ->setValue(date("d/m/Y",strtotime(Zend_Date::now()))) 
    ->addValidator('Callback',true, array('callback' => array($this, 'dateCheck')); 
$datePickerFrom->getValidator('Callback')->setMessage("'%value%' Cannot be in the past."); 
$this->addElement($datePickerFrom); 

당신은이 작업을 수행 할 수 있습니다

$myValidatorClass = new \SomeValidaotrClass(); 
->addValidator('Callback',true, array('callback' => array($myValidatorClass, 'dateCheck')); 

을 내가 지정 유효성 검사 방법 만든 같은 폼 클래스에서 :

public function dateCheck($value, $elements, $option) 
{ 
    $now = new DateTime(); 
    $fromDate = new DateTime(str_replace('/', '-', $elements['date_picker_from_date']));   

    if ($fromDate < $now) { 
     $this->getElement('date_picker_from_date')->getValidator('Callback')->setMessage("'%value%' Cannot be in the past."); 
     return false; 
    } else (SomethingElse) { 
      $this->getElement('date_picker_from_date')->getValidator('Callback')->setMessage("Some other message."); 
    } 

    return true; 
} 

을 또는 자신의 수업을 사용하는 경우 :

class SomeValidaotrClass 
{ 
    public function dateCheck($value, $elements, $option) 
    { 
     // Validation code... 
    } 
} 

메서드가 public이 아닌 경우 콜백은 메서드를 찾지 않습니다.