6

Zend Framework 2 を使用してアプリケーションを作成しています。それを使用して入力を検証していInputFilterます。Input条件付きでいくつかの s を必須にすることは可能ですか? つまり、次のようなコードがあります。

$filter = new \Zend\InputFilter\InputFilter();
$factory = new \Zend\InputFilter\Factory();
$filter->add($factory->createInput(array(
    'name' => 'type',
    'required' => true
)));
$filter->add($factory->createInput(array(
    'name' => 'smth',
    'required' => true
)));

が等しいsomething場合にのみ、フィールドを必須にする必要があります。それを行う組み込みの方法はありますか?それとも、カスタムバリデーターを作成する必要がありますか?type1

4

4 に答える 4

8

まず、空の値が Zend Framework 2 バリデーターに渡された時点で、空/null 値の検証を有効にすることができます。

次の例のように、コールバック入力フィルターを使用できます。

$filter = new \Zend\InputFilter\InputFilter();
$type   = new \Zend\InputFilter\Input('type');
$smth   = new \Zend\InputFilter\Input('smth');

$smth
    ->getValidatorChain()
    ->attach(new \Zend\Validator\NotEmpty(\Zend\Validator\NotEmpty::NULL))
    ->attach(new \Zend\Validator\Callback(function ($value) use ($type) {
        return $value || (1 != $type->getValue());
    }));

$filter->add($type);
$filter->add($smth);

これは基本的に、値smthが空の文字列で、値がtypeis notの場合に機能し1ます。の値が の場合type1smthの文字列とは異なる必要があります。

于 2013-02-27T11:31:59.853 に答える
3

$type->getValue は常に NULL だったので、Ocramius の例をうまく動作させることができませんでした。$context を使用するようにコードを少し変更しましたが、これでうまくいきました。

$filter = new \Zend\InputFilter\InputFilter();
$type   = new \Zend\InputFilter\Input('type');
$smth   = new \Zend\InputFilter\Input('smth');

$smth
    ->getValidatorChain()
    ->attach(new \Zend\Validator\NotEmpty(\Zend\Validator\NotEmpty::NULL))
    ->attach(new \Zend\Validator\Callback(function ($value, $context){
        return $value || (1 != $context['type']);
    }));

$filter->add($type);
$filter->add($smth);
于 2013-05-31T09:30:22.630 に答える
-3

残念ながら、次のように条件に基づいて必要なオプションを設定する必要があります。

$filter->add($factory->createInput(array(
    'name' => 'smth',
    'required' => (isset($_POST['type']) && $_POST['type'] == '1'),
)));
于 2012-12-19T00:21:12.743 に答える