CakePHP: Manual/CommonTasks/DataValidation/MultipleRules

Множество правил для поля

Если вы хотите назначить множество валидационных правил для одного поля, то вот пример того, как это должно выглядеть:

<?

var $validate = array(

    'fieldName' => array(

        'ruleName' => array(

            'rule' => 'ruleName',

            // доп. индексы, наподобие 'on', 'required', и т.д. идут здесь...

        ),

        'ruleName2' => array(

            'rule' => 'ruleName2',

            // доп. индексы, наподобие 'on', 'required', и т.д. идут здесь...

        )

    )

);

?>

Как вы видите, это похоже на то, что мы делали в предыдущей главе. Там для каждого поля у нас был только один массив валидационных параметров. В данном случае, каждое 'fieldName' состоит из массива индексов правил. Каждое 'ruleName' содержит отдельный массив валидационных параметров.

Это лучше показано в практическом примере:

<?

var $validate = array(

    'login' => array(

        'alphanumeric' => array(

            'rule' => 'alphaNumeric',  

            'message' => 'Разрешены только буквы и цифры.',

            'last' => true

         ),

        'minlength' => array(

            'rule' => array('minLength''8'),  

            'message' => 'Минимальная длина - 8 символов.'

        ),  

    )

);

?>

В примере, представленном выше, определены два правила для поля login: alphanumeric и minLength. Как вы видите, каждое правило идентифицировано индексом. В данном случае имена индексов совпадают с именами правил, которые они используют, но именем индекса может быть любое имя, которое вы выберете.

По умолчанию CakePHP пытается выполнить проверку поля, используя все валидационные правила, назначенные для этого поля и возвращает сообщение об ошибке для последнего невыполненного правила. Но если индекс 'last' установлен в true для правила и оно не выполняется, тогда возвращается сообщение об ошибке для этого правила и оставшиеся правила не проверяются. Таким образом, если вы предпочитаете показать сообщение об ошибке для первого невыполненного правила, то устанавливайте 'last' => true для каждого правила.

Если вы планируете использовать международные сообщения об ошибках, то вы можете определять сообщения об ошибках в вашем отображении:

<?

echo $form->input('login', array(

    'label' => __('Login'true), 

    'error' => array(

            'alphanumeric' => __('Разрешены только буквы и цифры'true),

            'minlength' => __('Минимальная длина - 8 символов'true)

        )

    )

);

?>

Теперь поле полностью интернационализировано и вы можете удалить сообщения из модели. Дополнительную информацию о функции __() читайте в главе «Локализация и интернационализация».

<< Одно правило для поля | Встроенные правила валидации >>