Próbuję utworzyć formularz rejestracji użytkownika, który sprawdza złożoność pola hasła. Napisałem niestandardowy weryfikator, aby to zrobić zgodnie z documentation. Ten plik znajduje się w moim module "User" w User \ src \ User \ Validator.Zend Framework 2 Custom Validators for Forms
<?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 ...
}
}
Mój problem pojawia się podczas próby użycia tego walidatora w moim formularzu rejestracyjnym użytkownika. Próbowałem dodać walidatora do ServiceManager, konfigurując go w Module.php.
public function getServiceConfig() {
return array(
'invokables' => array(
'PasswordStrengthValidator' => 'User\Validator\PasswordStrength'
),
);
}
Następnie dodałem go do filtra wejściowego w 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;
}
Jednak po uzyskaniu dostępu do formularza i naciśnięciu przycisku wysyłania otrzymuję wyjątek ServiceNotFoundException.
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for PasswordStrengthValidator
Czy występuje problem z moją konfiguracją ServiceManager? Nie jestem nawet pewien, czy jest to odpowiedni sposób na użycie niestandardowego walidatora. Znalazłem wiele przykładów przy użyciu ZF1, ale dokumentacja i przykłady dla ZF2, które znalazłem, nie wykraczają poza pisanie walidatora, aby zaadresować jego integrację z formularzami itp. Każda rada byłaby bardzo doceniana.
Huh, nie zdawałem sobie sprawy, że może mieć do czynienia z nazwą byłem zarejestrowanie go jako ... I rzeczywiście wypróbowane ostatnią propozycję i skonfigurować go w ServiceManager z w pełni kwalifikowaną nazwą klasy i to wystarczy! Dzięki za pomoc! –