错误Zend \ InputFilter \ Exception \ RuntimeException

时间:2014-03-29 07:33:08

标签: php zend-framework zend-framework2

我正在尝试使用zf2来验证表单,但是有错误:

An error occurred
An error occurred during execution; please try again later.
Additional information:
Zend\InputFilter\Exception\RuntimeException

文件:

C:\xampp\htdocs\ZEND\Users\Users\vendor\ZF2\library\Zend\InputFilter\Factory.php:395

消息:

Invalid validator specification provided; was neither a validator instance nor an array specification

代码:

 <?php
namespace Users\Form;
use Zend\InputFilter\InputFilter;




    class RegisterFilter extends InputFilter{

    public function __construct(){
        $this->add(array(
            'name' => 'email',
            'required' =>true,
            'validators' => array(
                'name' => 'EmailAddress',
                'options' => array(
                    'domain' => true,
                ),
            ),  
        ));
        $this->add(array(
            'name' => 'user',
            'required' => true,
            'filters' => array(
                array('name' => 'StripTags'),
                array('name' => 'StringLength'),
            ),
            'validators' => array(
                array(

                    'options' => array(
                        'encoding' => 'UTF-8',
                        'min' => 6,
                        'max' => 32,

                    ),
                ),
            ),
        ));

    }

}

RegisterForm

   <?php
    namespace Users\Form;
    use Zend\Form\Form;


        class RegisterForm extends Form {

            public function __construct($name = null){
                parent::__construct('Register');
                $this->setAttribute('method', 'post');
                $this->setAttribute('enctype', 'multipart/form-data');

                $this->add(array(
                    'name' => 'user',
                    'attributes' => array(
                        'type' => 'text',
                        'required' => 'required'
                    ),
                    'options' => array(
                        'label' => 'UserName',
                    ),
                ));
                $this->add(array(
                        'name' => 'pwd',
                        'attributes' => array(
                                'type' => 'password',
                                'required' => 'required'
                        ),
                        'options' => array(
                            'label' => 'Password',

                        )
                ));
                $this->add(array(
                        'name' => 'cpwd',
                        'attributes' => array(
                            'type' => 'password',
                            'required' => 'required'

                        ),
                        'options' => array(
                            'label' => 'Comfirm Password',
                        ),
                ));
                $this->add(array(
                        'name' => 'submit',

                        'attributes' => array(
                            'type' => 'submit',
                            'value' => 'Register',
                    ),
                ));
                $this->add(array(
                    'name' => 'email',
                    'attributes' => array(
                        'type' => 'email',
                    ),
                    'options' => array(
                        'label' => 'Email',
                    ),
                    'attributes' => array(
                        'required' => 'required',
                    ),
                    'filters' => array(
                        array('name' => 'StringTrim')
                    ),
                    'validators' => array(
                    array(
                        'name' => 'EmailAddress',
                        'options' => array(
                            'messages' => array(
                            \Zend\Validator\EmailAddress::INVALID_FORMAT => 'Email Address Format is invalid'
                            )
                        )

                    )
                )
                ));

            }
        }

RegisterController

<?php
namespace Users\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Users\Form\RegisterForm;
use Users\Form\RegisterFilter;


    class RegisterController extends AbstractActionController{
        public function indexAction(){

            $form = new RegisterForm();
            $viewmodel =  new ViewModel(array('form' => $form));
            return $viewmodel;
        }
        public function processAction(){
            if(!$this->request->isPost()){
                return $this->redirect()-> toRoute(NULL,
                        array( 'controller' => 'register',
                                'action' => 'index',
                        ));
            }
            $post = $this->request->getPost();
            $form = new RegisterForm();
            $inputFilter = new RegisterFilter();
            $form->setInputFilter($inputFilter);
            $form->setData($post);
            if(!$form->isValid()){
                $model = new  ViewModel(array(
                        'error' => true,
                        'form' => $form,
                ));
                $model ->setTemplate('users/register/index');
                return $model;
            }
            return $this->redirect()->toRoute(NULL,array(
                    'controller' => 'register',
                    'action' => 'confirm',
            ));
        }
        public function confirmAction(){
            $viewmodel = new ViewModel();
            return $viewmodel;
        }
    }

index.phtml

<section class = 'register'>
<h2> Register </h2>
<?php if($this -> error): ?>
<p class='error'> have errors </p>
<?php endif ?>
<?php 
    $form = $this->form;
    $form -> prepare();
    $form -> setAttribute('action', $this->url(NULL,
            array('controller' => 'Register', 'action' => 'process')));
    $form -> setAttribute('method','post');
    echo $this->form()->openTag($form);
?>
<dl class='zend_form'>
    <dt><?php echo $this->formLabel($form -> get('user')) ;?> </dt>
    <dd>    <?php echo $this->formElement($form->get('user')) ;?>
            <?php echo $this->formElementErrors($form->get('user')) ;?>
    </dd>
    <dt><?php echo $this->formLabel($form -> get('email'));?></dt>
    <dd><?php echo $this->formElement($form-> get('email')) ;?>
        <?php echo $this->formElementErrors($form -> get('email')) ;?>
    </dd>
    <dt><?php echo $this->formLabel($form -> get('pwd')) ;?></dt>
    <dd><?php echo $this->formElement($form->get('pwd')) ;?>
        <?php echo $this->formElementErrors($form->get('pwd')) ;?>
    </dd>
    <dt><?php echo $this->formLabel($form ->get('cpwd'));?></dt>
    <dd><?php echo $this->formElement($form->get('cpwd'));?>
        <?php echo $this->formElementErrors($form->get('cpwd'))?>
    </dd>
    <dd><?php echo $this->formElement($form->get('submit'));?>
        <?php echo $this->formElementErrors($form->get('submit'));?>
    </dd>
</dl>
<?php echo $this->form()->closeTag()?>
</section>

1 个答案:

答案 0 :(得分:3)

您的验证程序结构错误。 验证器密钥期望一组验证器。您正在直接提供验证器名称和选项。

改变这个:

this->add(array(
    'name' => 'email',
    'required' =>true,
    'validators' => array(
        'name' => 'EmailAddress',
        'options' => array(
            'domain' => true,
        ),
    ),  
));

要:

this->add(array(
    'name' => 'email',
    'required' =>true,
    'validators' => array(
        array(
            'name' => 'EmailAddress',
            'options' => array(
                'domain' => true,
            ),
        )
        //Another validator here ..
    ),  
));