我正在尝试使用load
edit
,save
和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
$user
var我从蛋糕的find
方法中获得了正确的用户。
我哪里错了?
答案 0 :(得分:5)
我认为问题可能在于您查询用户记录的方式。当你这样做时:
$user = $this->User->find('first', array('activation_key' => $code));
变量$user
将用户记录填充为数组。你检查确保它不是空的,然后继续; 但问题是$this->User
尚未填充。我想如果你试过debug($this->User->id)
它会是空的。 read() method按照您的思维方式运作。
您可以尝试使用$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
接收表单数据的方式相同,并在本书的Saving Your Data部分进行了描述。
我很好奇,如果你的设置的另一部分阻碍了。您应用的其他部分可以正确写入数据库吗?您还应检查以确保没有验证错误,例如:
<?php
if ($this->Recipe->save($this->request->data)) {
// handle the success.
}
debug($this->Recipe->validationErrors);