после использования setGlobalState получаю CException

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
limion
Сообщения: 123
Зарегистрирован: 2011.08.07, 09:38
Откуда: Одесса

после использования setGlobalState получаю CException

Сообщение limion »

Всем привет!

Пытаюсь в контроллере установить глобальную переменную через 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.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: после использования setGlobalState получаю CException

Сообщение samdark »

Хм, нужно как-то додебажить до истины. По описанию не ясно, как это получить у себя.
Аватара пользователя
limion
Сообщения: 123
Зарегистрирован: 2011.08.07, 09:38
Откуда: Одесса

Re: после использования setGlobalState получаю CException

Сообщение limion »

На другом проекте такой проблемы нет. И что характерно, на том проекте где проблемы нет функция print_r() полностью выводит массив хендлеров, а там где не работает она массив обрезает. Отчего так может быть?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: после использования setGlobalState получаю CException

Сообщение samdark »

Что значит обрезает?
Аватара пользователя
limion
Сообщения: 123
Зарегистрирован: 2011.08.07, 09:38
Откуда: Одесса

Re: после использования setGlobalState получаю CException

Сообщение limion »

Ну т.е. я вижу на экране не весь массив типа:

Код: Выделить всё

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

Сообщение samdark »

Ясно, что ничего не ясно... Идей никаких :(
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: после использования setGlobalState получаю CException

Сообщение lancecoder »

апач вс нгинкс
Аватара пользователя
limion
Сообщения: 123
Зарегистрирован: 2011.08.07, 09:38
Откуда: Одесса

Re: после использования setGlobalState получаю CException

Сообщение limion »

Если смотреть содержимое через CVarDumper, то всё отображает и не обрезает. Но такая штука:

Если смотреть весь массив хендлеров, то он его весь и выдает:

Код: Выделить всё

0 =>
array
(
    0 => CLogRouter#1  ( ... )
    1 => 'processLogs'
),
1 => 
array
(
      0 => CWebApplication#1(...)
      1 => 'saveGlobalState'
),
2 => array
(
      0 => CmsSettings#61(...)
      1 => 'whenRequestEnds'
)
 
А если каждый смотреть отдельно внутри foreach($this->_e[$name] as $handler), то на 3м шаге (где должен быть CmsSettings->whenRequestEnds) получаем null.

И что еще странно - хендлер екстеншна  CmsSettings вешается в его методе init(), а хендлер глобалстейта я вешаю в контроллере, т.е. по-идее уже после него, а в массиве мы видим, что они поменяны местами. Странно.
Ответить