我正在尝试制作一个用户注册表单来检查密码字段的复杂性。我已经根据文档编写了一个自定义验证器来执行此操作。该文件位于我的“用户”模块中,位于 User\src\User\Validator。
<?php
namespace User\Validator;
use Zend\Validator\AbstractValidator;
class PasswordStrength extends AbstractValidator {
const LENGTH = 'length';
const UPPER = 'upper';
const LOWER = 'lower';
const DIGIT = 'digit';
protected $messageTemplates = array(
self::LENGTH => "'%value%' must be at least 6 characters long",
self::UPPER => "'%value% must contain at least one uppercase letter",
self::LOWER => "'%value% must contain at least one lowercase letter",
self::DIGIT => "'%value% must contain at least one digit letter"
);
public function isValid($value) {
... validation code ...
}
}
我的问题是在我的用户注册表单中尝试使用这个验证器。我尝试通过在 Module.php 中配置验证器将其添加到 ServiceManager。
public function getServiceConfig() {
return array(
'invokables' => array(
'PasswordStrengthValidator' => 'User\Validator\PasswordStrength'
),
);
}
然后我将它添加到 User.php 中的输入过滤器中。
public function getInputFilter() {
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'username',
'required' => true,
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 100,
),
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'password',
'required' => true,
'validators' => array(
array(
'name' => 'PasswordStrengthValidator',
),
),
)));
$this->inputFilter = $inputFilter;
}
return $this->inputFilter;
}
但是,当我访问表单并点击提交按钮时,我得到一个 ServiceNotFoundException。
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for PasswordStrengthValidator
我的 ServiceManager 配置有问题吗?我什至不确定这是否是首先使用自定义验证器的适当方式。我发现了很多使用 ZF1 的示例,但是我发现的 ZF2 的文档和示例从未超出验证器的编写范围以解决其与表单的集成等问题。任何建议将不胜感激。