0

我正在尝试loadeditsave记录CakePHP 2.0但我generic error 在该save方法中得到一个不能帮助我理解问题所在的方法。

如果我尝试debug($this->User->invalidFields());我得到一个empty array,但我false$this->User->save()条件中得到。

这是我收到错误的控制器操作:

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我会收到带有消息的activation_fail模板页面。Save error message

如果我printr$uservar,我会从 cake 的find方法中获得正确的用户。

我哪里错了?

4

1 回答 1

5

我认为问题可能出在您查询用户记录的方式上。当你这样做时:

$user = $this->User->find('first', array('activation_key' => $code));

该变量$user以数组形式填充用户记录。您检查以确保它不为空,然后继续;问题是$this->User尚未填充。我想如果你尝试debug($this->User->id)它会是空的。read() 方法按照您的想法工作。

您可以尝试使用该$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数组而不是修改当前模型。您说如果您返回一个有效用户debug($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);
于 2011-11-12T05:26:46.440 回答