繁体   English   中英

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

[英]custom validator in InputFilter in Zend Framework 2

我编写了一个自定义类来验证荷兰的BSN(美国的SSN)。 该代码可独立运行。 但是,我无法使其用作扩展InputFilter的验证器。 我确实在User模块的'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崩溃。

欢迎任何帮助,我正在寻找解决方案的日子。 是的,我确实尝试过本网站上的建议,但这些建议似乎都不适合我的情况

我认为您需要使用完全合格的验证器类名称。 试试这个代码:

$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的初学者 例如,我写的“使用Zend Framework 2”一书中有一章专门介绍使用过滤器/验证器和编写自己的过滤器/验证器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM