簡體   English   中英

驗證程序在Zend Framework 2中不起作用

[英]Validator not working in Zend Framework 2

我的zend Framework 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;
    }

} 

我認為您錯過了文檔教程中的某些內容 您的代碼是錯誤的。

你有 :

'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數組中。

好吧,以上代碼在文檔中,無法正常工作。 我不知道原因,但是我找到了解決方案。 對於驗證器,請更換

'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;
    }

} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM