[英]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.