Всем привет!
Пытаюсь в контроллере установить глобальную переменную через Yii::app()->setGlobalState('kisLastUpdate',time()); При обращении к контроллеру внизу страницы вываливается ексепшн: Событие "CWebApplication.onendrequest" привязано неверным обработчиком "NULL". Хотя сам стейт устанавливается (смотрел state.bin).
Полез глядеть какие обработчики 'onendrequest' в итоге получаются. Кол-во обработчиков верное. Но посмотреть их содержимое не выходит, пробовал и print_r() и var_dump() и тот и другой в конце обрезают и не до конца не показывают.
Проблема как-бы решается, если после setGlobalState вызвать Yii::app()->saveGlobalState(), т.к. он отменяет свой хендлер и сразу обновляет файл state.bin. Но почему не работает штатно я не пойму ((.
Версия Yii 1.1.13, php 5.2.17.
после использования setGlobalState получаю CException
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: после использования setGlobalState получаю CException
Хм, нужно как-то додебажить до истины. По описанию не ясно, как это получить у себя.
Нравится Yii? Давайте сделаем его лучше!.
Re: после использования setGlobalState получаю CException
На другом проекте такой проблемы нет. И что характерно, на том проекте где проблемы нет функция print_r() полностью выводит массив хендлеров, а там где не работает она массив обрезает. Отчего так может быть?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: после использования setGlobalState получаю CException
Что значит обрезает?
Нравится Yii? Давайте сделаем его лучше!.
Re: после использования setGlobalState получаю CException
Ну т.е. я вижу на экране не весь массив типа:
... Далее хтмл експешна
А только кусок, который обрывается где-то:
и далее хтмл ексепшна
Код: Выделить всё
Array(
[0]=> LogRouterComponent Object => array(
...
),
[1]=> handlerName
),
Array(
[0] => CWebApplication Object ...
[1] => handlerName
)
А только кусок, который обрывается где-то:
Код: Выделить всё
Array(
[0] => CWebApplication Object => array(
... внутри этого массива обрезается, (т.е. массив не завершается)
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: после использования setGlobalState получаю CException
Ясно, что ничего не ясно... Идей никаких
Нравится Yii? Давайте сделаем его лучше!.
- lancecoder
- Сообщения: 2532
- Зарегистрирован: 2012.06.26, 17:16
Re: после использования setGlobalState получаю CException
апач вс нгинкс
Re: после использования setGlobalState получаю CException
Если смотреть содержимое через CVarDumper, то всё отображает и не обрезает. Но такая штука:
Если смотреть весь массив хендлеров, то он его весь и выдает:
А если каждый смотреть отдельно внутри foreach($this->_e[$name] as $handler), то на 3м шаге (где должен быть CmsSettings->whenRequestEnds) получаем null.
И что еще странно - хендлер екстеншна CmsSettings вешается в его методе init(), а хендлер глобалстейта я вешаю в контроллере, т.е. по-идее уже после него, а в массиве мы видим, что они поменяны местами. Странно.
Если смотреть весь массив хендлеров, то он его весь и выдает:
Код: Выделить всё
0 =>
array
(
0 => CLogRouter#1 ( ... )
1 => 'processLogs'
),
1 =>
array
(
0 => CWebApplication#1(...)
1 => 'saveGlobalState'
),
2 => array
(
0 => CmsSettings#61(...)
1 => 'whenRequestEnds'
)
И что еще странно - хендлер екстеншна CmsSettings вешается в его методе init(), а хендлер глобалстейта я вешаю в контроллере, т.е. по-идее уже после него, а в массиве мы видим, что они поменяны местами. Странно.