Неопределенный метод stdClass :: user () ошибка при использовании CakePHP Auth - PullRequest
2 голосов
/ 26 февраля 2010

Я довольно новичок в CakePHP и строю сайт, используя компонент Auth. Пару раз я пытался что-то сделать с этим компонентом, что вызвало ошибку

Fatal error: Call to undefined method stdClass::user() in /ftphome/site/app/controllers/users_controller.php on line 395

Строка, на которую он ссылается в этом случае,

$this->User->read(null, $this->Auth->user('id'));

Эта ошибка не исчезает, когда я возвращаю код обратно к тому, что был до ошибки, и мне кажется, что я могу избавиться от него только путем удаления некоторых файлов на сервере (я не уверен, какие файлы, когда Я попытался удалить все файлы в каталоге tmp, но ошибка не исчезла, поэтому я удалил весь сайт и восстановился из последней версии SVN.

В данном конкретном случае я думаю, что вызвал ошибку, поместив следующий код в app_controller

class AppController extends Controller {
    function beforeRender() {
        $this->set('test', $this->Auth->user());
    }
}

Который я скопировал из этой темы http://groups.google.com/group/cake-php/browse_thread/thread/ee9456de93d2eece/cff6fe580d13622b?lnk=gst&q=auth

В предыдущий раз я вызвал проблему, пытаясь обновить данные пользователя Auth после обновления пользователя в базе данных.

Я вижу, что я каким-то образом удаляю объект пользователя из объекта Auth, но не могу понять, почему мне нужно удалить файлы на сайте, чтобы вернуть его, или как код, приведенный выше, удаляет его - любая помощь будет очень полезной оценили.

Редактировать

Похоже, что в случае, о котором я упоминал выше, проблема была в файле app_controller.php, который я скопировал в каталог app/controllers. Просто наличие файла с пустым объявлением класса вызывает эту ошибку - может кто-нибудь дать дальнейшее понимание?

Дальнейшее редактирование

Я понял, что был немного глуп, и проблема была вызвана тем, что я поставил app_controller.php в /app/controllers/app_controller.php, когда уже был один в /app/app_controller.php - спасибо за ввод, хотя Энди, это помогает мне понять немного больше о том, что происходило.

1 Ответ

2 голосов
/ 26 февраля 2010

Эта ошибка обычно выдается, когда экземпляр класса (в вашем случае экземпляр Auth) был сериализован на диск, затем повторно прочитан / десериализован в другом запросе, но определение класса (т. Е. Auth) еще не было загружено, поэтому PHP создает его как "stdClass" (стандартный класс)

Когда вы удаляете файлы своего сайта, вы удаляете хранилище сеансов (IIRC - это папка Cache в приложении CakePHP), поэтому при следующем запросе новый сеанс создается с нуля.

Прошло много времени с тех пор, как я в последний раз использовал CakePHP (я переключился на Zend), поэтому я не могу вспомнить, включает ли Cake файлы, для которых требуется использование функции __autoload.

В этой записи списка рассылки кто-то говорит, что вы можете использовать $ this-> Auth-> user () в представлении, но в контроллере вы можете использовать $ session-> read ('Auth.User') для получить пользовательский компонент. Не уверен, в чем разница, может быть $ this-> Auth является помощником вида, поэтому недоступен в контроллере?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...