と考えられている:
問題は(私が正しくそれを得た場合)であることです次の例では、空値が'fieldName'
の場合、検証はトリガーされません。
$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
にこれがあなたのCMS内のページに割り当てられたURLをチェックし、衝突を回避のようなあなたは、特定のケースを持っていたときに非常に迷惑ですが、これは、非常にいらいらすることができます(空のURLはまだURLです!) 。
基本的にNotEmpty
バリデーターを自分で添付し、setRequired
とsetAllowEmpty
への呼び出しを避けるために、これを空の文字列に対して処理する方法があります。これは基本的にutomatically独自にNotEmpty
バリデータを添付しないZend\InputFilter\Input#injectNotEmptyValidator
を教えてくれます:
$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)
あなたもnull
に対してチェックしたい場合は、以下のようZend\InputFilter\Input
を拡張する必要があります:あなたの場合
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
allow_empty = trueとmy要素の値が空の場合、zf2はその要素が有効であるとみなし、バリデーターを起動しません。 – deyine
私はあなたの問題を理解していないと思います。空の値を許可するかしないかを指定します。空の値を許可しないと、すべてのバリデータが実行されます。空の値が入力されると、検証は失敗します。あなたがそれらを許可すれば、空の値はそれ以上検証される必要はありませんoO – Sam