0

In einem Fieldset habe ich einen Element\Radiofoo und Element\Textbar.Wie bekomme ich die ausgewählte Option eines Radion Button Elements in Zend Framework 2?

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', 
       ... 
      ], 
      ... 
     ]); 
} 

Die Validierung des Feldes bar auf der ausgewählten foo Option abhängig ist. Es ist einfach zu implementieren, wenn ich den ausgewählten Wert von foo bekommen kann:

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

Aber es gibt keine Methode Radio#getCheckedValue(). Nun, ich kann über die $this->get('foo')->getOptions()['value_options'] iterieren, aber ist es wirklich die einzige Möglichkeit?

Wie erhalten (in der Fieldset#getInputFilterSpecification()) die ausgewählte Option einer Zend\Form\Element\Radio?

Antwort

0

Die ausgewählte Option wird zusammen mit allem anderen aus dem HTML-Formular an den Server gesendet, und all dies ist in Validatoren über das $context-Array verfügbar.

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".' 
         ] 
        ] 
       ] 
      ] 
     ], 
    ]; 
} 

Das würde überprüfen, ob ‚foo‘ gleich ‚a‘, dh eine Option, ‚a‘ ausgewählt und Rückkehr: Sie können durch die Verwendung eines Callback-Validator und die $context Array wie folgt ein bedingt erforderlich Feld erstellen true wenn dies der Fall ist, wird der Eingang als gültig markiert, und false, wenn dies nicht der Fall ist, wird der Eingang als ungültig markiert.

Verwandte Themen