2017-06-15 76 views
1

所以我有我的表单中的元素列表,其中之一是一个简单的是/否选项的选择框。当该字段为“否”时,我想使下一个输入字段成为必需。ZF2只根据另一个元素创建一个表单元素?

此刻我的输入滤波器的样子:

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,additional场,没有validators运行。

仅当condition为'no'(值'0')时,我该如何制作additional

回答

1

可以从getInputFilterSpecification函数中检索元素。因此,有可能基于其他因素的相同形式或字段集的值的元素标记为required与否:

'required' => $this->get('condition')->getValue() === '0', 

有了这个,我也可以摆脱大规模callback验证过。

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', 
        ], 
       ], 
      ], 
     ], 
    ], 
]; 
相关问题