0

Fieldset我有一個Element\RadiofooElement\Textbar如何獲取Zend Framework 2中的Radion按鈕元素的選定選項?

public function init() 
{ 
    $this->add(
     [ 
      'type' => 'radio', 
      'name' => 'foo', 
      'options' => [ 
       'label' => _('foo'), 
       'value_options' => [ 
        [ 
         'value' => 'a', 
         'label' => 'a', 
         'selected' => true 
        ], 
        [ 
         'value' => 'b', 
         'label' => 'b' 
        ] 
       ] 
      ] 
      ... 
     ]); 

    $this->add(
     [ 
      'name' => 'bar', 
      'type' => 'text', 
      'options' => [ 
       'label' => 'bar', 
       ... 
      ], 
      ... 
     ]); 
} 

bar是根據所選擇的選項foo的字段的驗證。這很容易實現,如果我能得到的foo選擇的值:

public function getInputFilterSpecification() 
{ 
    return [ 
     'bar' => [ 
      'required' => $this->get('foo')->getCheckedValue() === 'a', 
      ... 
     ], 
    ]; 
} 

但是沒有方法Radio#getCheckedValue()。那麼,我可以遍歷$this->get('foo')->getOptions()['value_options'],但它真的是唯一的方法嗎?

如何獲得(在Fieldset#getInputFilterSpecification()Zend\Form\Element\Radio的選定選項?

回答

0

所選擇的選項被髮送到服務器與一切從HTML表單一起,是這一切是通過$context陣列驗證可用。

public function getInputFilterSpecification() { 
    return [ 
     'bar' => [ 
      'required' => false, 
      'allow_empty' => true, 
      'continue_if_empty' => true, 
      'required' => true, 
      'validators' => [ 
       [ 
        'name' => 'Callback', 
        'options' => [ 
         'callback' => function ($value, $context) { 
          return $context['foo'] === 'a' 
         }, 
         'messages' => [ 
          \Zend\Validator\Callback::INVALID_VALUE => 'This value is required when selecting "a".' 
         ] 
        ] 
       ] 
      ] 
     ], 
    ]; 
} 

這將檢查,如果「富」等於「一」,即選擇「A」選擇和回報: 您可以通過使用回調驗證和$context陣列像這樣創建一個條件必需的場true它是什麼時候,它將輸入標記爲有效,當它不是時,標記輸入無效。

相關問題