Error handling 使用cakephp保存数据赢得';行不通
我正试图用Error handling 使用cakephp保存数据赢得';行不通,error-handling,save,cakephp-2.0,Error Handling,Save,Cakephp 2.0,我正试图用CakePHP 2.0加载,编辑和保存记录,但在保存方法期间,我得到了一个一般错误,这不能帮助我理解问题出在哪里 如果我尝试使用debug($this->User->invalidFields())我得到一个空数组,但我从$this->User->save()条件中得到false 以下是控制器操作,我从中得到错误: public function activate ($code = false) { if (!empty ($code)) { // if I
CakePHP 2.0
加载,编辑和保存记录,但在保存方法期间,我得到了一个一般错误
,这不能帮助我理解问题出在哪里
如果我尝试使用debug($this->User->invalidFields())
我得到一个空数组
,但我从$this->User->save()
条件中得到false
以下是控制器操作,我从中得到错误:
public function activate ($code = false) {
if (!empty ($code)) {
// if I printr $user I get the right user
$user = $this->User->find('first', array('activation_key' => $code));
if (!empty($user)) {
$this->User->set(array (
'activation_key' => null,
'active' => 1
));
if ($this->User->save()) {
$this->render('activation_successful');
} else {
// I get this error
$this->set('status', 'Save error message');
$this->set('user_data', $user);
$this->render('activation_fail');
}
debug($this->User->invalidFields());
} else {
$this->set('status', 'Account not found for this key');
$this->render('activation_fail');
}
} else {
$this->set('status', 'Empty key');
$this->render('activation_fail');
}
}
当我尝试操作test.com/users/activate/hashedkey
时,我会得到激活失败
模板页面以及保存错误消息
消息
如果我printr
使用$user
var,我将从cake的find
方法中获得正确的用户
我错在哪里?我认为问题可能在于您查询用户记录的方式。执行此操作时:
$user = $this->User->find('first', array('activation_key' => $code));
变量$user
将用户记录作为数组填充。你检查确保它不是空的,然后继续;但问题是,$this->User
尚未填充。我想如果您尝试debug($this->User->id)
它将是空的。这是你的思维方式
您可以尝试使用该$user
数组中的ID来首先设置模型ID,如下所示:
if (!empty($user)) {
$this->User->id = $user['User']['id']; // ensure the Model has the ID to use
$this->User->set(array (
'activation_key' => null,
'active' => 1
));
if ($this->User->save()) {
...
编辑:另一种可能的方法是使用$user
数组,而不是修改当前模型。您说过,如果您调试($user)
,您将返回一个有效用户,因此如果这是真的,您可以执行以下操作:
if (!empty($user)) {
$user['User']['activation_key'] = null;
$user['User']['active'] = 1;
if ($this->User->save($user)) {
...
此方法的工作方式与从$This->request->data
接收表单数据的方式相同,本书的部分对此进行了描述
不过我很好奇,你的设置是否还有另一部分妨碍了你。应用程序的其他部分是否可以正确写入数据库?您还应该检查以确保没有验证错误,例如:
<?php
if ($this->Recipe->save($this->request->data)) {
// handle the success.
}
debug($this->Recipe->validationErrors);
我认为问题可能在于您查询用户记录的方式。执行此操作时:
$user = $this->User->find('first', array('activation_key' => $code));
变量$user
将用户记录作为数组填充。你检查确保它不是空的,然后继续;但问题是,$this->User
尚未填充。我想如果您尝试debug($this->User->id)
它将是空的。这是你的思维方式
您可以尝试使用该$user
数组中的ID来首先设置模型ID,如下所示:
if (!empty($user)) {
$this->User->id = $user['User']['id']; // ensure the Model has the ID to use
$this->User->set(array (
'activation_key' => null,
'active' => 1
));
if ($this->User->save()) {
...
编辑:另一种可能的方法是使用$user
数组,而不是修改当前模型。您说过,如果您调试($user)
,您将返回一个有效用户,因此如果这是真的,您可以执行以下操作:
if (!empty($user)) {
$user['User']['activation_key'] = null;
$user['User']['active'] = 1;
if ($this->User->save($user)) {
...
此方法的工作方式与从$This->request->data
接收表单数据的方式相同,本书的部分对此进行了描述
不过我很好奇,你的设置是否还有另一部分妨碍了你。应用程序的其他部分是否可以正确写入数据库?您还应该检查以确保没有验证错误,例如:
<?php
if ($this->Recipe->save($this->request->data)) {
// handle the success.
}
debug($this->Recipe->validationErrors);
是否有可能无法验证?您能否建议我一些替代方法来调试无效文件,而不是debug($this->User->invalidFields())代码>?是否有可能无法验证?您能否建议我一些替代方法来调试无效文件,而不是debug($this->User->invalidFields())代码>?感谢您提供的信息,正如您所说的$this->User->id
为空,我已尝试在您编写时修复它,但问题仍然存在,同样是$this->User->save($this->User->data)
也没有成功。什么能代替$this->User
为空?在上面添加了一些想法,再次感谢。回答的第二部分解决了我的问题,我需要向$user
添加数据,然后保存它。我还需要将$this->User->find('first',array('activation\u key'=>$code))
更改为…find('first',array('conditions'=>array('User.activation\u key'=>$code))
谢谢您提供的信息,正如您所说的$this->User->id
为空,我已尝试在您编写时修复它,但问题仍然存在,同样是$this->User->save($this->User->data)
也没有成功。什么能代替$this->User
为空?在上面添加了一些想法,再次感谢。回答的第二部分解决了我的问题,我需要向$user
添加数据,然后保存它。我还需要将$this->User->find('first',array('activation\u key'=>$code))
更改为…find('first',array('conditions'=>array('User.activation\u key'=>$code))代码>