cakephp: как установить множественную проверку в модели для разных действий? - PullRequest
4 голосов
/ 02 ноября 2010

У меня есть модель пользователя.В нем я установил валидации, которые используются при регистрации пользователя.Это отлично работает.Но когда пользователь редактирует информацию своего профиля, я не хочу проверять некоторые поля, такие как пароль, адрес электронной почты и т. Д. Как это возможно.Ниже приведен код.

<?php
class User extends AppModel{

    var $name = 'User';

    // used when user registers
    var $validate = array(

        'login' => array(
            'minLength' => array(
                'rule' => array('minLength', '6'),
                'field' => 'login', 
                'message' => 'mimimum 6 characters long'
                )
        ),
        'password' => array( // don't want to validate in edit profile page
            'minLength' => array(
                'rule' => array('minLength', '6'),
                'field' => 'password',
                'message' => 'minimum 6 characters long'
                )
        ),
        'email' => array(
            array(
            'rule' => 'email',
            'message' => 'please enter a valid email address'
            )
        )
    );
?>

Выше используется, когда я регистрирую пользователя.Но когда пользователь редактирует свой профиль, я не разрешаю редактировать / изменять пароль пользователя.Поэтому каждый раз при редактировании профиля он проверяет правильность пароля.Я не добавил поле пароля на странице редактирования профиля, я не хочу проверять поле пароля.Могу ли я иметь разные правила проверки для разных действий?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 02 ноября 2010

Несколько способов сделать это:

  • Используйте параметр on , чтобы применить правила только к create или update действия.
  • unset нежелательные правила из модели до проверки.

    unset($this->User->validate['password']);
    
  • Использование пользовательских методов проверки , которые являютсядостаточно умен, чтобы выяснить, должны ли они применяться или нет, например, проверяя, установлен ли $this->id или $data['id'] или нет.Не рекомендуется, если вы не уверены, что делаете.

  • Используйте параметр $fieldlist метода save , чтобы ограничить сохранение и проверку указанными значениями.только поля.Поля, отсутствующие в списке, не будут ни сохранены, ни проверены.Очень рекомендуется, так как он также защищает от подделки форм.

    $this->User->save($this->data, true, array('only', 'certain', 'fields'));
    
0 голосов
/ 02 ноября 2010

Попробуйте:

<?php
class User extends AppModel{

    var $name = 'User';

    // used when user registers
    var $validate = array(

        'login' => array(
            'minLength' => array(
                'rule' => array('minLength', '6'),
                'field' => 'login', 
                'message' => 'mimimum 6 characters long'
                )
        ),
        'password' => array( // don't want to validate in edit profile page
            'minLength' => array(
                'rule' => array('minLength', '6'),
                'field' => 'password',
                'message' => 'minimum 6 characters long',
                'on' => 'create' //Only perform validation when creating a new record.

                )
        ),
        'email' => array(
            array(
            'rule' => 'email',
            'message' => 'please enter a valid email address'
            )
        )
    );
?>

Обратите внимание на новую строку в массиве проверки пароля.

Это задокументировано в Поваренная книга .

0 голосов
/ 02 ноября 2010

просто сделайте до этого:

var $validate = array(

        'login' => array(
            'minLength' => array(
                'rule' => array('minLength', '6'),
                'field' => 'login', 
                'message' => 'mimimum 6 characters long'
                )
        ),

для простого способа проверки try jquery validation .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...