如何仅使用某些验证集来验证Cake PHP中的数据?

lin*_*ndy 6 php validation cakephp

我试图验证我的用户模型数据,我遇到了这个问题.

假设我有以下验证规则,存储在$ validate变量中:

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

在UsersController控制器中,我有两个操作:register()和login().问题是,如何仅使用usernameCheckForRegister规则验证register()操作中的用户名字段,如何使用另一个规则usernameCheckForLogin验证login()操作中的用户名字段?CakePHP中是否有任何行为或方法允许我在验证时选择应用于表单字段的规则集?

预先感谢您的帮助!

lin*_*ndy 8

我想我跑过了符合我需求的解决方案.

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
);
Run Code Online (Sandbox Code Playgroud)

你做:

/**
 * 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 */
    )
); 
Run Code Online (Sandbox Code Playgroud)

然后在您的控制器中,您可以在验证集之间切换,如下所示:$this->User->setValidation('register');

即使您必须编写更多代码,我认为此解决方案最适合我的需求