Zend Framework 2中的InputFilter中的自定义验证器

时间:2014-03-27 15:30:39

标签: php validation zend-framework2

我已经编写了一个自定义类来验证荷兰BSN(美国的SSN)。 代码独立运行。 但是我不能让它作为验证器扩展InputFilter。 我确实把这个类包含在' module.config.php'中。对于我的用户模块。

该课程的代码如下

<?php

namespace User\Validator;
use Zend\Validator\AbstractValidator;

class CheckBSN extends AbstractValidator {

    //put your code here
    const INVALID = 'BSNInvalid';
    protected $messageTemplates = array(
        self::INVALID => "'%value%' is an invalid BSN",
    ); 

    public function isValid($value) {
        if (!ctype_digit($value)) 
        {
            $this->error(self::INVALID);
            return false;
        }
        if (strlen($value) !== 9) {
            $this->error(self::INVALID);
            return false;
        }

        $pos = 8;
        $checksum = -1 * $value[$pos];
        $weight = 2;

        for ($pos = 7; $pos >= 0; $pos--) {
            $checksum += $weight++ * $value[$pos];
         }

         if (($checksum % 11) !== 0) {
            $this->error(self::INVALID);
            return false;
         }

        return true;
    }
}

我想将其添加到UserFilter类

中的以下代码中
$this->add(array(
    'name' => 'bsn',
    'required' => true,
    'filters'  => array(
        array('name' => 'StringTrim'),
        array('name' => 'StripTags'),
    ),
    'validators' => array(
        array('name' => 'StringLength',
            'options' => array(
                'encoding' => 'UTF-8', 
                'min'      => 9, 
                'max'      => 9,
            ),
        ),
    )
));

当我将我的类添加为第二个验证器时,它将被忽略。当我替换第一个类时,应用程序崩溃了一个servicenotfoundexception。

欢迎任何帮助,我正在寻找解决方案好几天。是的,我确实尝试过这个网站上的建议,似乎没有一个适用于我的情况

1 个答案:

答案 0 :(得分:0)

我认为您需要使用完全限定的验证程序类名。试试这段代码:

$this->add(array(
    'name' => 'bsn',
    'required' => true,
    'filters'  => array(
        array('name' => 'StringTrim'),
        array('name' => 'StripTags'),
    ),
    'validators' => array(
        array('name' => '\User\Validator\CheckBSN',
            'options' => array(                    
            ),
        ),
    )
));

我还建议您查看其中一个关于ZF2的books for beginners。例如,我写的“使用Zend Framework 2”一书中有一章专门用于使用过滤器/验证器并编写自己的过滤器/验证器。

相关问题