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)
        )
    )
);

?>


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

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