Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Error handling 使用cakephp保存数据赢得';行不通_Error Handling_Save_Cakephp 2.0 - Fatal编程技术网

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))