3

フィールドセットの getInputFilterSpecification メソッドでバリデーター チェーンを使用して、breakChainOnFailure パラメーターを使用し、エラー メッセージを 1 つだけ取得する必要があります。

InputFilter クラスを使用してバリデーターチェーンを作成する方法を知っていますzend documentation、たとえば

    $input = new Input('foo');
    $input->getFilterChain()
          ->attachByName('stringtrim', true)  //here there is a breakChainOnFailure
          ->attachByName('alpha');

しかし、ファクトリーフォーマットを使用して同じものを作りたいです。このサンプルのどこに breakChainOnFailure パラメーターを配置できますか?

    $factory = new Factory();
    $inputFilter = $factory->createInputFilter(array(
        'password' => array(
            'name'       => 'password',
            'required'   => true,
            'validators' => array(
                array(
                    'name' => 'not_empty',
                ),
                array(
                    'name' => 'string_length',
                ),
            ),
        ),
    ));
4

2 に答える 2

9

あなたの質問に答えるには、InputFilter ファクトリを確認する必要があります。populateValidatorsメソッドが見つかります。ご覧のとおり、バリデータの場合break_chain_on_failure、仕様内のキーを探しています。それをバリデータスペック配列に追加するだけです...

$factory = new Factory();
$inputFilter = $factory->createInputFilter(array(
    'password' => array(
        'name'       => 'password',
        'required'   => true,
        'validators' => array(
            array(
                'name' => 'not_empty',
                'break_chain_on_failure' => true,
            ),
            array(
                'name' => 'string_length',
            ),
        ),
    ),
));

ところで、( here ) と( hereattachByName ) のメソッド シグネチャは同じではありません。最初の例では、フィルター チェーンでメソッドを呼び出していますが、これは失敗時の中断をまったくサポートしていません。(これは、バリデータ チェーン メソッドの 3 番目のパラメーターであり、2 番目のパラメーターではないことに注意してください)FilterChainValidatorChain

于 2013-05-01T12:59:06.223 に答える