Получение ошибки при использовании Yii::app()-›user-›isGuest

Я пытаюсь узнать, является ли пользователь гостем, используя Yii::app()->user->isGuest, но получаю следующее уведомление:

Undefined property: CWebApplication::$user

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

Я пытался проверить, доступен ли компонент через

if(isset(Yii::app()->user))

Однако это не удается. Как я могу проверить, является ли пользователь гостем, даже если Yii::app()->user не определен? Должен ли я получать это уведомление при использовании isGuest?

EDIT: я изменил директиву error_reporting на "E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT". Мне нужно было двигаться дальше. Теперь я получил эту фатальную ошибку:

Неустранимая ошибка: вызов функции-члена getId() для необъекта в home/mario/projects/ciudad_wiki/yii/framework/web/auth/CWebUser.php в строке 530

Расположение функции памяти времени нет

  1. 0,0005 235120 {основной}( ) ../index.php:0
  2. 0,0207 1548168 CApplication->run() ../index.php:13
  3. 0,0207 1548352 CWebApplication->processRequest() ../CApplication.php:162
  4. 0,0235 1725768 CWebApplication->runController() ../CWebApplication.php:135
  5. 0,0272 2103464 CController->run() ../CWebApplication.php:276
  6. 0,0279 2145872 CController->runActionWithFilters() ../CController.php:266
  7. 0,0279 2145984 CController->runAction() ../CController.php:287
  8. 0,0279 2146128 CInlineAction->runWithParams() ../CController.php:309
  9. 0,0279 2146688 SiteController->actionIndex() ../CInlineAction.php:50
  10. 0,0529 3875888 CController->render() ../SiteController.php:33
  11. 0,0529 3876112 CController->renderPartial() ../CController.php:783
  12. 0,0532 3877352 CBaseController->renderFile() ../CController.php:870
  13. 0,0532 3877672 CBaseController->renderInternal() ../CBaseController.php:96
  14. 0,0539 3918144 требуют (foo_dir/protected/views/site/index.php') ../CBaseController.php:127
  15. 0,0705 4428584 CModule->__get() ../CBaseController.php:199
  16. 0,0705 4428584 CModule->getComponent() ../CModule.php:104
  17. 0,0723 4580360 CWebUser->init() ../CModule.php:388
  18. 0,0736 4671144 CWebUser->getIsGuest() ../CWebUser.php:195
  19. 0,0736 4671240 CWebUser->getState() ../CWebUser.php:279
  20. 0,0736 4671320 CWebUser->getStateKeyPrefix() ../CWebUser.php:557

Трассировка аналогична предыдущей, Yii не может найти ничего в $_SESSION, связанного с пользовательским компонентом.

EDIT #2: я загрузил трассировку с включенным E_NOTICE, вот она: уведомление PHP

EDIT #3: я недавно обновил php до версии 5.4. Когда я запускаю приложение на сервере с php 5.3, проблем нет, возможно, за кулисами есть уведомление, но не фатальная ошибка, которую я получаю с php 5.4. Как писал bool.dev: это полная догадка.


person Mario Marín    schedule 14.06.2012    source источник
comment
Вы можете проверить в своем файле config/main.php, есть ли компонент 'user' в массиве 'component'?   -  person bool.dev    schedule 14.06.2012
comment
@bool.dev да, есть пользовательский компонент: 'user'=>array( 'allowAutoLogin'=>true, 'class' => 'WebUser', ),   -  person Mario Marín    schedule 14.06.2012
comment
вы можете удалить 'class' или изменить его на 'class'=>'CWebUser' , или у вас есть класс, который вы создали сами, с именем WebUser?   -  person bool.dev    schedule 14.06.2012
comment
@bool.dev У меня был класс WebUser, его больше нет. Я удалил класс, но ничего не изменилось.   -  person Mario Marín    schedule 14.06.2012
comment
это полное предположение, вы можете попробовать это: Yii::app()->getComponent('session');// this will create session if not yet activated а затем вызвать Yii::app()->user; или лучше попробовать создать компонент Yii::app()->getComponent('user');   -  person bool.dev    schedule 14.06.2012
comment
Похоже, вы копируете конфиг куда-то в другое место, чего-то не хватает в вашей конфигурации.   -  person Onkar Janwa    schedule 14.06.2012
comment
@onkarjanwa Я не вижу ничего особенного в protected/config/main, когда сравниваю его с демонстрацией блога Yii. Единственное отличие состоит в конфигурации плагина для аутентификации в Facebook.   -  person Mario Marín    schedule 14.06.2012
comment
@bool.dev Я добавил Yii::app()->getComponent('session'); <br>echo '<pre>'; var_dump(Yii::app()->getComponent('user')); echo '</pre>'; в views/layout/main.php, но ничего не изменилось.   -  person Mario Marín    schedule 14.06.2012
comment
Попробуйте добавить user к preload.   -  person Boris Belenski    schedule 15.06.2012
comment
@BorisBelenski Спасибо, но это не сработало.   -  person Mario Marín    schedule 15.06.2012
comment
не эксперт, но вы проверяли, создается ли компонент сеанса после getComponent('session') ? и что вы думаете происходит? есть предположения? это странно, вы спрашивали на форуме yii? если нет, спросите там же.   -  person bool.dev    schedule 15.06.2012


Ответы (1)


Извините, я запустил массивную замену, которая повредила фреймворк. Я понял, что проблема была в каталоге yii, потому что я не отслеживаю его с помощью git, когда я настроил новую производственную среду на виртуальной машине, все снова было в порядке, и единственное отличие было в каталоге фреймворка. Спасибо за помощь.

person Mario Marín    schedule 18.06.2012