I am making an application using Zend Framework 2. I am validating input using it's InputFilter
. Is it possible, to make some Input
s required conditionally? I mean I have code like that:
$filter = new \Zend\InputFilter\InputFilter();
$factory = new \Zend\InputFilter\Factory();
$filter->add($factory->createInput(array(
'name' => 'type',
'required' => true
)));
$filter->add($factory->createInput(array(
'name' => 'smth',
'required' => true
)));
I want the field something
, to be required, ONLY when type
is equal 1
. Is there a built-in way to do that? Or should I just create custom validator?
First of all, you may want to enable validation on empty/null values as of Empty values passed to Zend framework 2 validators
You can use a callback input filter as in following example:
$filter = new \Zend\InputFilter\InputFilter();
$type = new \Zend\InputFilter\Input('type');
$smth = new \Zend\InputFilter\Input('smth');
$smth
->getValidatorChain()
->attach(new \Zend\Validator\NotEmpty(\Zend\Validator\NotEmpty::NULL))
->attach(new \Zend\Validator\Callback(function ($value) use ($type) {
return $value || (1 != $type->getValue());
}));
$filter->add($type);
$filter->add($smth);
This will basically work when the value smth
is an empty string and the value for type
is not 1
. If the value for type
is 1
, then smth
has to be different from an empty string.