Как использовать только определенный набор проверки для проверки данных в Cake PHP? - PullRequest
6 голосов
/ 29 августа 2010

Я пытался проверить данные моей модели пользователя и столкнулся с этой проблемой.

Скажем, у меня есть следующие правила проверки, хранящиеся в переменной $ validate:

var $validate=array(
        "username" => array(
            "usernameCheckForRegister" => array(
                "rule" => ..., 
                "message" => ...
            ),
            "usernameCheckForLogin" => array(
                "rule" => ...,
                "message" => ...
            )
        ),
        //rules for other fields
    );

В контроллере UsersController у меня есть два действия: register () и login (). Проблема в том, как проверить поле имени пользователя в действии register (), используя ТОЛЬКО правило usernameCheckForRegister, и как проверить поле имени пользователя в действии login (), используя другое правило usernameCheckForLogin? Есть ли какое-либо поведение или метод в CakePHP, который позволяет мне выбирать, какой набор правил применять к полю формы при проверке?

Заранее благодарю за помощь!

Ответы [ 3 ]

8 голосов
/ 29 августа 2010

Я думаю, что выбрал решение, которое соответствует моим потребностям.

http://bakery.cakephp.org/articles/view/multivalidatablebehavior-using-many-validation-rulesets-per-model

Вместо того, чтобы определять несколько правил для каждого поля, это поведение подразумевает определение нескольких «общих» правил, в соответствии с которыми вы определяете все свои правила, связанные с полями.

Итак, вместо того, чтобы делать:

var $validate=array(
    "username" => array(
        "usernameCheckForRegister" => array(
            "rule" => ..., 
            "message" => ...
        ),
        "usernameCheckForLogin" => array(
            "rule" => ...,
            "message" => ...
        )
    ),
    //rules for other fields
);

Вы делаете:

/**
 * Default validation ruleset
 */
var $validate = array(
        'username' => /* rules */,
        'password' => /* rules */,
        'email' => /* rules */
    );

/**
 * Custom validation rulesets
 */
var $validationSets = array(
    'register' => array(
        'username' => /* rules */,
        'password' => /* rules */,
        'email' => /* rules */,
    ),
    'login' => array(
        'username' => /* rules */,
        'password' => /* rules */
    )
); 

И затем в вашем контроллере вы переключаетесь между наборами проверки, как это: $this->User->setValidation('register');

Несмотря на то, что вам нужно написать немного больше кода, я думаю, что это решение лучше всего соответствует моим потребностям

0 голосов
/ 03 сентября 2010

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

unset($this->User->validate['username']['usernameCheckForRegister']);
0 голосов
/ 29 августа 2010

Проверьте руководство :

var $validate=array(
        "username" => array(
            "usernameCheckForRegister" => array(
                "rule" => ..., 
                "message" => ...,
                "on" => "create"
            ),
            "usernameCheckForLogin" => array(
                "rule" => ...,
                "message" => ...,
                "on" => "update"
            )
        ),
        //rules for other fields
    );

ОБНОВЛЕНИЕ: О ... Я только что заметил, что кажется невозможным использовать правило проверки при входе в систему, если вы не обновляете пользователя при каждой попытке входа. Вы можете изменить метод login () для проверки имени пользователя.

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