Я думаю, что проблема может заключаться в том, что вы запрашиваете запись пользователя. Когда вы делаете это:
$user = $this->User->find('first', array('activation_key' => $code));
Переменная $user
заполняется записью пользователя в виде массива. Вы проверяете, чтобы убедиться, что он не пустой, затем продолжаете; но проблема в том, что $this->User
не был заполнен. Я думаю, что если вы попробуете debug($this->User->id)
, это будет пусто. Метод read () работает так, как вы думаете.
Вы можете попробовать использовать идентификатор из этого массива $user
, чтобы сначала установить идентификатор модели, например:
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);