我有一个用户模型。在其中,我设置了注册用户时使用的验证。这很好。但是当用户编辑他的个人资料信息时,我不想验证一些字段,如密码,电子邮件等。怎么可能。下面是代码。
<?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'
)
)
);
?>
当我注册用户时使用上面的内容。但是当用户编辑他的个人资料时,我不允许编辑/更改用户密码。因此,每次编辑配置文件时,它都会检查密码验证。我没有在编辑个人资料页面中添加密码字段,我不想验证密码字段。那么我可以为不同的操作设置不同的验证规则吗?
感谢。
答案 0 :(得分:8)
有几种方法可以做到这一点:
on
parameter仅将规则应用于创建或更新操作。 unset
验证前模型中不需要的规则。
unset($this->User->validate['password']);
使用足够聪明的custom validation methods来确定它们是否应该适用,例如:通过检查是否设置了$this->id
或$data['id']
。除非你确定自己在做什么,否则不推荐使用。
使用save
method的$fieldlist
参数将保存和验证仅限制到指定字段。不在列表中的字段既不会保存也不会被验证。非常推荐,因为它还可以防止形式欺骗。
$this->User->save($this->data, true, array('only', 'certain', 'fields'));
答案 1 :(得分:0)
直到这个:
var $validate = array(
'login' => array(
'minLength' => array(
'rule' => array('minLength', '6'),
'field' => 'login',
'message' => 'mimimum 6 characters long'
)
),
有一种验证try jquery validation的简单方法。
答案 2 :(得分:0)
试试这个:
<?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'
)
)
);
?>
请注意验证数组中的新行以获取密码。
Cookbook中记录了这一点。