2012-08-14 3 views
0

양식으로 유효성 검사를 시도하지만 오류 메시지가 표시되지 않습니다.ZendFramework 2.0.0rc3 양식

//이 내 코드입니다 :

$form = new TestForm(); 
$form->setInputFilter(new TestFilter()); 
$data = array('id'=>'','email'=>'[email protected]'); 
$form->setData($data); 

if($form->isValid()){ 
    echo 'ok'; 
} else { 
echo 'not ok <br/>'; 
$messagesForm = $form->getMessages(); 
$filter=$form->getInputFilter(); 
$messagesFilter=$filter->getMessages(); 
var_dump($messagesForm); 
var_dump($messagesFilter); 
} 

///////////////// 
Output 
not ok 
//messagesForm 

    array 
    empty 
//MessagesFilter 
    array 
    'id' => 
    array 
     'isEmpty' => string 'Value is required and can't be empty' (length=36) 

_이

어떻게 가능한가? 필터는 괜찮지 만 양식에서 오류 메시지를받을 수 없습니다. 버그가 있거나 잘못 되었습니까?

FULL 코드 :

TestFilter : _

<?php 
namespace mvc\filter; 
use Zend\InputFilter\InputFilter; 
use Zend\InputFilter\Factory as InputFactory; 

class TestFilter extends InputFilter 
{ 
     public function __construct() 
     { 
      $factory = new InputFactory(); 
      $this->add($factory->createInput(array('name'=>'id','required'=>true))); 
      $this->add($factory->createInput(array('name'=>'email','required'=>true))); 
     } 
} 
?> 

_

TestForm _
네임 스페이스 MVC의 \ 양식;
Zend \ InputFilter \ Factory를 사용하십시오.
Zend \ Form \ Element를 사용하십시오.
Zend \ Form \ Form을 사용하십시오. 내가 ZF2 아직 함께 일하지만 요소 validators를 추가하려고하지 않은

+0

이 오류가 아니십니까? "id is empty" –

+0

예, 오류 ID는 비어 있지만 var_dump ($ messagesForm) 및 var_dump ($ messagesFilter)는 같거나 또는 같지 않아야합니다. – user1597726

+0

양식 및 필터링/유효성 검사와 관련된 전체 코드를 제공하십시오 - 데이터의 유효성을 검증하지 않았기 때문에 오류 또는 값을 얻지 못할 가능성이 높습니다.) – Sam

답변

0

class TestForm extends Form 
{ 
public function prepareElements() 
{ 
    $this->add(array( 
     'name' => 'id', 
     'attributes' => array( 
      'type' => 'text', 
      'label' => 'Your name', 
     ), 
    )); 

     $this->add(array( 
     'name' => 'email', 
     'attributes' => array( 
      'type' => 'email', 
      'label' => 'Your email address', 
      ), 
     )); 
    } 
} 
?> 

_ :

use Zend\Validator; 
$this->add(array( 
    'name' => 'id', 
    'attributes' => array( 
     'type' => 'text', 
     'label' => 'Your name', 
    ), 
    'validator' => new StringLength(array('max'=>20)) 
)); 
} 
+0

문제는 prepareElements()가 호출되지 않았다는 것입니다. 그런 다음 해당 코드를 생성자에 씀으로써 현재 작동하고 있습니다. – user1597726

0

사용자가 지정하는 '유효성 검사기'해야 getInputFilter의 예 :

use 
Zend\InputFilter\InputFilter, 
Zend\InputFilter\Factory as InputFactory, 
Zend\InputFilter\InputFilterAwareInterface, 
Zend\InputFilter\InputFilterInterface; 

class User implements InputFilterAwareInterface 
{ 
public function getInputFilter() 
{ 
    if (!$this->inputFilter) { 
     $inputFilter = new InputFilter(); 

     $factory = new InputFactory(); 

     $inputFilter->add($factory->createInput(array(
      'name'  => 'email', 
      'required' => true, 
      'filters' => array(
       array('name' => 'StripTags'), 
       array('name' => 'StringTrim'), 
      ), 
      'validators' => array(
       array(
        'name' => 'StringLength', 
        'options' => array(
         'encoding' => 'UTF-8', 
         'min'  => 1, 
         'max'  => 100, 
        ), 
       ), 
      ), 
     ))); 
     $this->inputFilter = $inputFilter;   
    } 

    return $this->inputFilter; 
} 
0

모델에서 입력 필터를 검색 한 다음 설정하면 형식으로 변환 :

... 
$form = new ItemForm(); 
$form->setInputFilter($user->getInputFilter()); 
$form->setData($params); 
if ($form->isValid()) { 
    ... 
} 
... 
관련 문제