0

フォームで検証しようとしましたが、エラー メッセージが表示されません。

//これは私のコードです:

$form = new TestForm();
$form->setInputFilter(new TestFilter());
$data = array('id'=>'','email'=>'myemail@myemail.com');
$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)

_

どのように可能ですか?フィルターは問題ないのですが、フォームからエラー メッセージが表示されません。

完全なコード:

テストフィルター: _

<?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\form;
Zend\InputFilter\Factory を使用します。
Zend\Form\Element を使用します。
Zend\Form\Form を使用します。

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',  
            ),  
        ));  
    }  
}  
?>

_

4

3 に答える 3

0

モデルから入力フィルターを取得し、それをフォームに設定することで、このようにすることができます。

...
$form = new ItemForm();
$form->setInputFilter($user->getInputFilter());
$form->setData($params);
if ($form->isValid()) {
  ...
}
...
于 2012-11-15T14:36:14.200 に答える
0

ZF2 はまだ使用していませんが、要素にバリデーターを追加してみてください。

use  Zend\Validator;
$this->add(array(  
    'name' => 'id',  
    'attributes' => array(  
        'type'  => 'text',  
        'label' => 'Your name',  
    ),
    'validator' => new StringLength(array('max'=>20))
));  
}  
于 2012-08-14T17:22:47.177 に答える
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;
}
于 2012-08-23T13:16:01.000 に答える