Validation ZF2是否仅基于另一个元素生成所需的表单元素?
因此,我的表单中有一个元素列表,其中一个是带有简单yes/no选项的选择框。当字段为“否”时,我希望将下一个输入字段设置为必填字段 此时,我的输入过滤器看起来像:Validation ZF2是否仅基于另一个元素生成所需的表单元素?,validation,zend-framework2,zend-form2,Validation,Zend Framework2,Zend Form2,因此,我的表单中有一个元素列表,其中一个是带有简单yes/no选项的选择框。当字段为“否”时,我希望将下一个输入字段设置为必填字段 此时,我的输入过滤器看起来像: return [ [ 'name' => 'condition', 'required' => true, ], [ 'name' => 'additional', 'required' => false,
return [
[
'name' => 'condition',
'required' => true,
],
[
'name' => 'additional',
'required' => false,
'validators' => [
[
'name' => 'callback',
'options' => [
'callback' => function($value, $context) {
//If condition is "NO", mark required
if($context['condition'] === '0' && strlen($value) === 0) {
return false;
}
return true;
},
'messages' => [
'callbackValue' => 'Additional details are required',
],
],
],
[
'name' => 'string_length',
'options' => [
'max' => 255,
'messages' => [
'stringLengthTooLong' => 'The input must be less than or equal to %max% characters long',
],
],
],
],
],
];
我的发现是因为我有'required'=>false,
对于附加
字段,没有一个验证器运行
只有当条件
为“否”(值“0”)时,我如何使附加
成为必需项?可以从getInputFilterSpecification
函数中检索元素。因此,可以将一个元素标记为必需的
,也可以不基于相同表单或字段集中另一个元素的值:
'required' => $this->get('condition')->getValue() === '0',
有了这个,我也可以摆脱大量的回调
验证器
return [
[
'name' => 'condition',
'required' => true,
],
[
'name' => 'additional',
'required' => $this->get('condition')->getValue() === '0',
'validators' => [
[
'name' => 'string_length',
'options' => [
'max' => 255,
'messages' => [
'stringLengthTooLong' => 'The input must be less than or equal to %max% characters long',
],
],
],
],
],
];