następujące prace dla ZF2 wersji 2.1.1:
problem (jeśli mam go poprawnie) jest to, że w Poniższy przykład, dla pustych wartości 'fieldName'
, nie jest uruchamiana sprawdzanie poprawności. To może być dość irytujące, choć w
$input = new \Zend\InputFilter\Input('fieldName');
$input
->setAllowEmpty(true)
->setRequired(false)
->getValidatorChain()
->attach(new \Zend\Validator\Callback(function ($value) {
echo 'called validator!';
return true; // valid
}));
$inputFilter = new \Zend\InputFilter\InputFilter();
$inputFilter->add($input);
$inputFilter->setData(array('fieldName' => 'value'));
var_dump($inputFilter->isValid()); // true, echoes 'called validator!'
$inputFilter->setData(array('fieldName' => ''));
var_dump($inputFilter->isValid()); // true, no output
$inputFilter->setData(array());
var_dump($inputFilter->isValid()); // true, no output
Jest to dość irytujące, kiedy mają szczególne przypadki, jak sprawdzanie adresu URL przypisanego do strony w CMS i unikania kolizji (pusty URL jest nadal URL!) .
Istnieje sposób postępowania z pustymi ciągami, który polega na samodzielnym podłączeniu walidatora NotEmpty
i unikaniu połączeń z setRequired
i setAllowEmpty
. To będzie w zasadzie powiedzieć Zend\InputFilter\Input#injectNotEmptyValidator
nie utomatycznie dołączyć NotEmpty
walidator na własną rękę:
$input = new \Zend\InputFilter\Input('fieldName');
$input
->getValidatorChain()
->attach(new \Zend\Validator\NotEmpty(\Zend\Validator\NotEmpty::NULL))
->attach(new \Zend\Validator\Callback(function ($value) {
echo 'called validator!';
return true; // valid
}));
$inputFilter = new \Zend\InputFilter\InputFilter();
$inputFilter->add($input);
$inputFilter->setData(array('fieldName' => 'value'));
var_dump($inputFilter->isValid()); // true, echoes 'called validator!'
$inputFilter->setData(array('fieldName' => ''));
var_dump($inputFilter->isValid()); // true, echoes 'called validator!'
$inputFilter->setData(array());
var_dump($inputFilter->isValid()); // false (null was passed to the validator)
Jeśli też chcesz sprawdzić przed null
, trzeba będzie przedłużyć Zend\InputFilter\Input
następująco:
class MyInput extends \Zend\InputFilter\Input
{
// disabling auto-injection of the `NotEmpty` validator
protected function injectNotEmptyValidator() {}
}
http://akrabat.com/zend-framework-2/setting-up-required-fields-that-can-be-empty-with-zendinputfilter/ – Sam
To nie jest to, czego potrzebuję, ponieważ if allow_empty = true i my wartość elementu jest pusta, zf2 uważa, że element jest prawidłowy i nie wywoła walidatorów. – deyine
Myślę, że nie rozumiem wtedy twojego problemu. Albo zezwolisz na puste wartości, albo nie. Jeśli nie zezwolisz na puste wartości, uruchomione zostaną wszystkie walidatory, w przeciwnym razie sprawdzanie poprawności zakończy się niepowodzeniem po podaniu pustych danych wejściowych. Jeśli zezwolisz na to, pusta wartość nie musi być sprawdzana więcej oO – Sam