2012-12-25 1 views
0

그들에게 젠드 \ 양식에 별도의 요소와 설정 옵션을 만든 다음 옵션을 지정하는 방법처럼 떨어지게 유효성 검사기를 설정하는 방법은 무엇입니까? 프레임 워크가 setRequired()에 대해 "No method exists"예외를 throw합니다.내가 객체로를 만들

P. 난 정말 배열 스타일을 사용하고 싶지 않아, 그것은 하나의 배열에 많은 양의 코드를 가지고있을 때 상당히 성가시다. 나는 다음을 의미합니다 :

$this->addElement('text', 'email', array(
     'label'  => 'Your email address:', 
     'required' => true, 
     'filters' => array('StringTrim'), 
     'validators' => array(
      'EmailAddress', 
     ) 
    )); 

답변

2

당신이 오해 한 것은, 유효성 검사기는 기본적으로 요소의 일부가 아닙니다.

요소에 일부 유효성 검사기 자체가 포함되기를 원할 경우. 당신은 요소를 만들기 위해 필요한 것은 구현 InputProviderInterface 같은 폼 유효성 검사가 시작했을 때, 형태의 InputFilter는 폼 요소에서 모든 유효성 검사기를 수집하고 최종 하나에 병합합니다

use Zend\Form\Element; 
use Zend\InputFilter\InputProviderInterface; 
class MyElement extends Element implements InputProviderInterface 
{ 
    public function getInputSpecification() 
    { 
     $spec = array(
      'name' => $this->getName(), 
      'required' => true, 
      'validators' => array(
       'EmailAddress', 
      ) 
     ); 

     return $spec; 
    } 
} 

있다.

그러나, 당신은 또한 양식을 추가/제거 핸들 폼 InputFilter에 의한 동적 유효성 검사기 수 :

$form = new \Zend\Form\Form(); 
$form->add($yourElement); 
$filter = $form->getInputFilter(); 
$filter->remove('email'); 
$filter->add(array(
    'name' => 'email', 
    'required' => true, 
    'validators' => array (
     'EmailAddress' 
    ), 
)); 
$form->setInputFilter($filter); 
$form->setData(array(
    'email' => 'abc', 
)); 
$form->prepare(); 
echo $form->isValid(); 
print_r($form->getMessages()); 
0

젠드 양식의 옵션은 다음과 같습니다 :이 요소에 유효성 검사 규칙을 정의해야 validators.you 옵션과 함께 worknig 사실 setRequired .

$this->review->addValidators(

array('NotEmpty',true, array('messages' => array('isEmpty' => "Please enter product Review."))) 

);