【问题标题】:Validator not working in Zend Framework 2验证器在 Zend Framework 2 中不起作用
【发布时间】:2014-08-19 00:17:03
【问题描述】:

我的 zend 框架 2 中的验证器不工作。即使您可以看到 required=>true 有效,并且如果我传递一个空字符串,也会向我显示错误。但是最小和最大长度验证不起作用,$form->isValid() 只返回 true。任何帮助将不胜感激。 我在 Zend 网站上关注本教程。 http://framework.zend.com/manual/2.3/en/user-guide/forms-and-actions.html

<?php

namespace AdminAuthentication\Model;

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

class Login implements InputFilterAwareInterface{
    public $username;
    public $password;

    protected $inputFilter;

    public function exchangeArray($data){
        $this->username = isset($data['username']) ? $data['username'] : null;
        $this->password = isset($data['password']) ? $data['password'] : null;
    }

    public function setInputFilter(InputFilterInterface $inputFilter){
        throw new \Exception("Not Used!");
    }

    public function getInputFilter(){

        if( ! $this->inputFilter ){

            $inputFilter = new InputFilter();
            $factory = new InputFactory();

            $inputFilter->add($factory->createInput(array(
                'name' => 'username',
                'required' => true,
                'filters' => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim' ),
                ),
                'validators' => array(
                    array('name' => 'StringLength',
                        'encoding' => 'UTF-8',
                        'min' => 5,
                        'max' => 35

                    )

                )
            )));

            $inputFilter->add($factory->createInput(array(
                'name' => 'password',
                'required' => true,
                'filters' => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim' ),
                ),
                'validators' => array(
                    array('name' => 'StringLength',
                        'encoding' => 'UTF-8',
                        'min' => 5

                    )

                )
            )));

            $this->inputFilter = $inputFilter;

        }
        return $this->inputFilter;
    }

} 

【问题讨论】:

    标签: php zend-framework2 zend-form


    【解决方案1】:

    我认为您错过了documentation tutorial 中的某些内容。你的代码是错误的。

    你有:

    'validators' => array(
                    array('name' => 'StringLength',
                        'encoding' => 'UTF-8',
                        'min' => 5,
                        'max' => 35
    
                    )
    
                )
    

    你应该有这个:

    'validators' => array (
                        array (
                                'name' => 'StringLength',
                                'options' => array (//<-----options array here
                                        'encoding' => 'UTF-8',
                                        'min' => 1,
                                        'max' => 100 
                                ) 
                        ) 
                ) 
    

    minmaxencoding 应该在 options 数组中。

    【讨论】:

      【解决方案2】:

      好吧,上面的代码在文档中并且不起作用。我不知道原因,但我找到了解决方案。对于验证器,替换

      'validators' => array(
                      array('name' => 'StringLength',
                          'encoding' => 'UTF-8',
                          'min' => 5
      
                      )
      
                  )
      

      'validators' => array(
                      new StringLength(
                          array(
                              'encoding' => 'UTF-8',
                              'min' => 5
                          )
                      ),
      
                  ),
      

      这是完整的代码。

      namespace AdminAuthentication\Model;
      
      use Zend\InputFilter\InputFilter;
      use Zend\InputFilter\InputFilterAwareInterface;
      use Zend\InputFilter\InputFilterInterface;
      use Zend\InputFilter\Factory as InputFactory;
      use Zend\Validator\StringLength;
      
      class Login implements InputFilterAwareInterface
      {
          public $username;
          public $password;
      
          protected $inputFilter;
      
          public function exchangeArray($data)
          {
              $this->username = isset($data['username']) ? $data['username'] : null;
              $this->password = isset($data['password']) ? $data['password'] : null;
          }
      
          public function setInputFilter(InputFilterInterface $inputFilter)
          {
              throw new \Exception("Not Used!");
          }
      
          public function getInputFilter()
          {
      
              if (!$this->inputFilter) {
      
                  $inputFilter = new InputFilter();
                  $factory = new InputFactory();
      
                  $inputFilter->add($factory->createInput(array(
                      'name' => 'username',
                      'required' => true,
                      'filters' => array(
                          array('name' => 'StripTags'),
                          array('name' => 'StringTrim'),
                      ),
                      'validators' => array(
                          new StringLength(
                              array(
                                  'encoding' => 'UTF-8',
                                  'min' => 5,
                                  'max' => 35
      
                              )
                          ),
      
                      ),
                  )));
      
                  $inputFilter->add($factory->createInput(array(
                      'name' => 'password',
                      'required' => true,
                      'filters' => array(
                          array('name' => 'StripTags'),
                          array('name' => 'StringTrim'),
                      ),
                      'validators' => array(
                          new StringLength(
                              array(
                                  'encoding' => 'UTF-8',
                                  'min' => 5
                              )
                          ),
      
                      ),
                  )));
      
                  $this->inputFilter = $inputFilter;
      
              }
              return $this->inputFilter;
          }
      
      } 
      

      【讨论】:

      • 对于新的字符串长度
      猜你喜欢
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多