【问题标题】:custom validator in InputFilter in Zend Framework 2Zend Framework 2 中 InputFilter 中的自定义验证器
【发布时间】:2025-12-11 19:25:02
【问题描述】:

我编写了一个自定义类来验证荷兰 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。

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

【问题讨论】:

  • 是的,我确实尝试过这个网站上的建议,但似乎没有一个适用于我的情况你能编辑列出你所说的内容以及它是如何不适用的吗?不申请?这将确保没有人浪费时间建议您已经尝试过的事情。

标签: php validation zend-framework2


【解决方案1】:

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

$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》一书中,有一章专门介绍使用过滤器/验证器和编写自己的过滤器/验证器。

【讨论】:

    最近更新 更多