3

私の目標は、URL で渡されたパラメーターを検証することなので、次のように、実行するバリデーターのリストを持つ検証メソッドを作成しました。

$validators = array(
        'number' => array(
            'digits',
            'presence' => 'required',
            'messages' => array(
                "%value%' is not a valid number.",
            ),
        ),
        'country' => array(
            'presence' => 'required',
            'InArray' => array('haystack' => array('USA', 'CAN', 'AUS', 'JPN')),
            'messages' => array(
                "'%value%' is not a valid country code.",
            ),
        ),
        // etc. 
);

$valid = new Zend_Filter_Input(array(), $validators, $data);
return $valid->isValid()

問題は、「InArray」バリデーターが何もしないことです。エラーは発生しませんが、機能しません。構文が間違っていると思います。

「InArray」バリデーターの正しい構文は何ですか?

4

1 に答える 1

3

で使用する追加のルールとプロパティをバリデーターに渡すZend_Filter_Inputには、オブジェクトの具体的なインスタンスを作成し、次のようにバリデーターとして設定します。

    $validators = array(
            'number' => array(
                    'digits',
                    'presence' => 'required',
                    'messages' => array(
                            "%value%' is not a valid number.",
                    ),
            ),
            'country' => array(
                    new Zend_Validate_InArray(
                        array('haystack' => array('USA', 'CAN', 'AUS', 'JPN'))
                    ),
                    'presence' => 'required',
                    'messages' => array(
                            "'%value%' is not a valid country code.",
                    ),
            ),
            // etc.
    );

このようにしなければならない理由は、バリデーターを使用するときに干し草の山を設定するためのフィルターメタコマンドInArrayがないためです。多くのバリデーターに適用される基本的なメタコマンドがいくつかありますが、haystack はその 1 つではありません。

干し草の山を指定するには、require オプションを使用して新しいZend_Validate_InArrayオブジェクトを直接作成し、そのバリデータを に指定されたバリデータの配列に渡しますZend_Filter_Input

于 2012-08-14T20:31:15.397 に答える