【发布时间】:2014-10-23 00:48:20
【问题描述】:
我正在使用 CakePHP 2.3.8,我正在尝试找出是否有办法即时将某些验证规则设置为必需。
例如,我的用户模型具有电话号码、用户名、电子邮件和密码验证。如果用户想要更改他们的用户名,则不需要他们的电话号码。这意味着我不能将其设置为必需,因为当更改用户名时,phone_number 将出现在数据中。
public $validate = array(
'username' => array(
'minLength' => array(
'rule' => array('minLength', '3'),
'message' => 'A username with a minimum length of 3 characters is required'
),
'unique' => array(
'rule' => 'isUnique',
'message' => 'This username has already been taken.'
)
),
'email' => array(
'email' => array(
'rule' => array('email'),
'message' => 'Please enter a valid email address.',
),
'unique' => array(
'rule' => 'isUnique',
'message' => 'This email address is already in use'
)
),
'password' => array(
'rule' => array('minLength', '8'),
'message' => 'A password with a minimum length of 8 characters is required'
),
'phone_number' => array(
'rule' => array('valid_phone'),
'message' => 'Invalid phone number',
)
);
为了解决这个问题,在我的控制器中,我一直在做的相应操作是检查以确保已发布预期的输入。如果不是,则将该索引设置为 null 以便对其进行验证...例如
public function change_username(){
if(!isset($this->request->data['username'])){
$this->request->data['username'] = null;
}
$this->ExampleModel->set($this->request->data);
//if it wasn't posted, the username index will be created but set to null. This is my workaround for setting something to "required"
if($this->ExampleModel->validates() == true){
//do something
}
else{
//do something
}
}
虽然这可行,但我觉得它需要大量额外的编码,特别是如果我有一个包含大量输入的表单。
我还尝试仅验证我需要的输入,但除非数据已发布,否则它会忽略它们。例如
if($this->ExampleModel->validates(array('fieldList' => array('phone')) == true){
.....
}
如果“电话”未发布,则不会对其进行验证。
有什么方法可以即时将给定输入的验证设置为 true 吗?我发现this article 使用了多个验证规则集,虽然它可以完成我想要的,但会涉及很多重新编码。
在验证之前,我可以将输入设置为必需吗?
【问题讨论】:
-
如果您在表单上只显示电子邮件字段,那么只有电子邮件将被验证。您无需担心用户名、密码验证
标签: php validation cakephp