更新时跳过cakePHP验证
我有一个配置文件页面,当用户尝试更新他们的页面配置文件时,输入没有按照验证规则进行验证,它仍然会继续保存(或至少输出成功消息),但没有存储任何数据,它会恢复到原始值。只有当验证规则通过时,它才会存储值 我不知道如何解决这个问题,因为我的验证规则看起来是正确的。有什么想法吗 验证规则更新时跳过cakePHP验证,php,validation,cakephp,Php,Validation,Cakephp,我有一个配置文件页面,当用户尝试更新他们的页面配置文件时,输入没有按照验证规则进行验证,它仍然会继续保存(或至少输出成功消息),但没有存储任何数据,它会恢复到原始值。只有当验证规则通过时,它才会存储值 我不知道如何解决这个问题,因为我的验证规则看起来是正确的。有什么想法吗 验证规则 public $validate = array( "username" => array( "email" => array( "rule" =>
public $validate = array(
"username" => array(
"email" => array(
"rule" => "email",
"message" => "The username must be a valid email address."
),
"unique" => array(
"rule" => "isUnique",
"message" => "This username has already been registered."
)
),
"password" => array(
"alphaNumeric" => array(
"rule" => "alphaNumeric",
"message" => "The password can only contain alpha-numeric characters"
),
"between" => array(
"rule" => array("between",8,12),
"message" => "The password must contain between 8 - 12 characters."
)
),
"company" => array(
"rule" => "notEmpty",
"message" => "Please provide a company name"
),
"first_name" => array(
"rule" => "notEmpty",
"message" => "Please provide the contact person's first name"
),
"last_name" => array(
"rule" => "notEmpty",
"message" => "Please provide the contact person's last name"
),
"telephone" => array(
"numeric" => array(
"rule" => "numeric",
"message" => "The telephone number must be numeric"
),
"maxLength" => array(
"rule" => array("maxLength",10),
"message" => "Your telephone umber must be 10 numbers."
)
),
"fax" => array(
"numeric" => array(
"rule" => "numeric",
"message" => "The fax number must be numeric"
),
"maxLength" => array(
"rule" => array("maxLength",10),
"message" => "Your fax umber must be 10 numbers."
)
),
"user_type_id" => array(
"rule" => "numeric",
"message" => "Please select a user type"
),
"user_status_id" => array(
"rule" => "numeric",
"message" => "Please select the users status."
)
);
控制器方法:
public function profile() {
if($this->request->is('post') || $this->request->is('put')) {
if($this->Auth->user("id") == $this->request->data['User']['id']) {
$this->User->save($this->request->data);
$this->Session->setFlash('Your profile has been updated','default',array('class'=>'success'));
} else {
$this->Session->setFlash("An error has occured updating your profile.");
}
}
$this->request->data = $this->User->read(null,$this->Auth->user("id"));
}
问题在于if块。在
$this->User->save($this->request->data)附近没有一个代码>
所以你需要
if ($this->User->save($this->request->data)) {
// set good flash
} else {
// else set bad flash
}
然后,当Auth->user('id')不等于post数据时,您需要一个验证(或者,如果您只是要给出一个通用消息,则将这两个语句合并为一个if语句)。您的验证可能工作正常。我相信问题是由以下逻辑造成的:
if($this->Auth->user("id") == $this->request->data['User']['id']) {
$this->User->save($this->request->data);
$this->Session->setFlash('Your profile has been updated','default',array('class'=>'success'));
} else {
$this->Session->setFlash("An error has occured updating your profile.");
}
if语句仅检查当前登录的用户id是否与表单中提交的用户id匹配。如果ID匹配,它将尝试保存记录。之后它将执行该行
因此,无论save调用是否有效,它仍将移动到下一行,$this->Session->setFlash('您的配置文件已更新','default',array('class'=>'success')代码>。这就是为什么它说档案每次都会更新
您可能想要类似于:
if($this->Auth->user("id") == $this->request->data['User']['id']) {
if ($this->User->save($this->request->data)) {
$this->Session->setFlash('Your profile has been updated','default',array('class'=>'success'));
} else {
$this->Session->setFlash("An error has occured updating your profile.");
}
} else {
this->Session->setFlash("This is not your profile.");
}
一般来说,有效的答案似乎不够,你需要写一篇文章才能得到最好的答案。