Давно не работал sfGuard, и вот возникла такая необходимость. Поскольку используется Doctrine, поставил sfDoctrineGuard
. Пробежался по мануалу, настроил myUser
, доступные модули, пересобрал модель. Все как сказано в документации. Однако, после подключения фильтра remember_me, начались чудеса. Фронтэнд начал падать с ошибкой
500 | Internal Server Error | sfException Call to undefined method myUser::isAnonymous
Метод в наличии есть, myUser наследуется от sfGuardSecurityUser
. Все на месте. И тем не менее.
Ларчик конечно открывался довольно просто:
sfContext::getUser возвращает юзера, основываясь на конфигурации производящих классов (factories.yml). При обработке в действии, видимо получается корректный инстанс пользователя, при работе же из фильтра, возвращался дефолтный sfUser.
Исправляется это добавлением конфигурации фактории пользователя:
#в apps/frontend/modules/config/factories.yml all: #... user: class: sfGuardSecurityUser param: timeout: 1800 logging: %SF_LOGGING_ENABLED% use_flash: true default_culture: %SF_DEFAULT_CULTURE%
Не забываем очистить кэш.
p.s. Странно что этот нюанс не нашел отражения в документации по установке и настройке плагина.