암호 필드의 복잡성을 검사하는 사용자 등록 양식을 만들려고합니다. documentation에 따라이 작업을 수행하는 사용자 정의 유효성 검사기를 작성했습니다. 이 파일은 User \ src \ User \ Validator의 'User'모듈에 있습니다.젠드 프레임 워크 2 폼용 사용자 정의 검사기
<?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 ...
}
}
내 사용자 등록 양식에서이 유효성 검사기를 사용하려고 할 때 문제가 발생합니다. Validator를 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에 대한 문서와 예제는 폼과의 통합을 다루기 위해 유효성 검사기를 작성하는 것 이상으로 확장하지 않습니다. 모든 조언은 크게 감사 할 것입니다.
허, 나는 그것을 내가 등록한 이름과 관련이 있다는 것을 몰랐습니다 ... 실제로 마지막 제안을 시도해 보았습니다. ServiceManager는 정규화 된 클래스 이름으로 트릭을 수행했습니다. 당신의 도움을 주셔서 감사합니다! –