0

aFieldsetには と がElement\Radio fooありElement\Text barます。

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

4

1 に答える 1

0

選択されたオプションは、HTML フォームからの他のすべてと一緒にサーバーに POST され、これらすべてが$context配列を介してバリデーターで利用可能になります。次のように、コールバック バリデータと$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".'
                        ]
                    ]
                ]
            ]
        ],
    ];
}

これは、'foo' が 'a' と等しいかどうか、つまりオプション 'a' が選択されているかどうかをチェックし、選択されてtrueいる場合は入力を有効としてマークし、falseそうでない場合は入力を無効としてマークします。

于 2016-11-10T12:38:26.643 に答える