Home PageКаталог Изменения НовыеКомментарии Пользователи Регистрация
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)
        )
    )
);

?>


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


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


 
Комментарии
главы «Локализация и интернационализация» еще нет?
217.197.229.58 (2010-09-01 12:19:30)
Добавить комментарий:

Файлов нет. [Показать файлы/форму]