Отключение вывода информации профайлера в экшене
Отключение вывода информации профайлера в экшене
Нужно чтоб в определенном экшене, который к примеру отдает файл, не выводилась информация профайлера.
die() не предлагать)
(когда-то проскакивало на форуме, но поиск ничего не дает)
die() не предлагать)
(когда-то проскакивало на форуме, но поиск ничего не дает)
Re: Отключение вывода информации профайлера в экшене
Спасибо, но это не верно.
в CApplication::end() вызывается событие onEndRequest
А там уже запусткается обработчик processLogs (CLogRouter::processLogs())
который управляет маршрутизацией сообщений (http://www.yiiframework.ru/doc/guide/ru/topics.logging), по правилам прописанным нами в конфиге
можно конечно удалить обработчик
но хотелось бы, в конкретном экшене, оставить маршрут на CFileLogRoute, а остальные удалить
в CApplication::end() вызывается событие onEndRequest
А там уже запусткается обработчик processLogs (CLogRouter::processLogs())
который управляет маршрутизацией сообщений (http://www.yiiframework.ru/doc/guide/ru/topics.logging), по правилам прописанным нами в конфиге
Код: Выделить всё
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
'file'=>array(
'class'=>'CFileLogRoute',
'levels'=>'trace, info, error, warning',
'categories'=>'system.*',
),
'profile' => array(
'class' => 'CProfileLogRoute',
//'levels' => 'profile',
),
array(
'class' => 'CWebLogRoute',
'levels' => 'error, warning, trace, profile, info',
),
),
),
Код: Выделить всё
Yii:app()->detachEventHandler('onEndRequest', array(Yii::app()->getComponent('log'), 'processLogs'));
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Отключение вывода информации профайлера в экшене
А выключить профайлер не получается?
CProfileLogRoute::$enabled
или воспользоваться фильтром, чтоб проверить активный экшн
CProfileLogRoute::$filter
CProfileLogRoute::$enabled
или воспользоваться фильтром, чтоб проверить активный экшн
CProfileLogRoute::$filter
Жду Yii 3!
Re: Отключение вывода информации профайлера в экшене
Код: Выделить всё
public function showProfile($param=false){
for ($i=0;$i<Yii::app()->getComponent('log')->routes->getCount();$i++)
if ('CProfileLogRoute'== get_class(Yii::app()->getComponent('log')->routes->remove($i)))
Yii::app()->getComponent('log')->routes->remove($i)->enabled=$param;
}
Re: Отключение вывода информации профайлера в экшене
@mc-bear
не получилось
@BuCeFaL
Спасибо! А то до этого весь класс приходилось копировать, и вносить свои изменения...
только у роутов бывают названия, поэтому переписал с использованием foreach
получилось это
------------------------------------------------------------------------------------------------
и кто-бы объяснил, на кой чёрт есть функция CLogRouter::setRoutes? (внутри фреймворка она не используется)
а результат её действия - PHP Error, т.к. она в массив инициализированных компонентов добавляет массив настроек компонента
Я не правильно её готовлю или баг?
не получилось
@BuCeFaL
Спасибо! А то до этого весь класс приходилось копировать, и вносить свои изменения...
только у роутов бывают названия, поэтому переписал с использованием foreach
получилось это
Код: Выделить всё
class LogRouter extends CLogRouter {
public function disableProfile(){
foreach (Yii::app()->getComponent('log')->routes as $route) {
if(in_array(get_class($route), array('CProfileLogRoute', 'CWebLogRoute'))) {
$route->enabled = false;
}
}
}
}
и кто-бы объяснил, на кой чёрт есть функция CLogRouter::setRoutes? (внутри фреймворка она не используется)
а результат её действия - PHP Error, т.к. она в массив инициализированных компонентов добавляет массив настроек компонента
Я не правильно её готовлю или баг?
- pls-kick-me
- Сообщения: 42
- Зарегистрирован: 2011.02.05, 22:39
- Откуда: Украина, Донецк
Re: Отключение вывода информации профайлера в экшене
Меня бы мой препод задавил бы за этот код , в том смысле что надо так:BuCeFaL писал(а):Код: Выделить всё
public function showProfile($param=false){ for ($i=0;$i<Yii::app()->getComponent('log')->routes->getCount();$i++) if ('CProfileLogRoute'== get_class(Yii::app()->getComponent('log')->routes->remove($i))) Yii::app()->getComponent('log')->routes->remove($i)->enabled=$param; }
Код: Выделить всё
$count = Yii::app()->getComponent('log')->routes->getCount();
for ($i=0; $i < $count; $i++)
Yes I'm Insistent
Re: Отключение вывода информации профайлера в экшене
Если цель отключать любой посторонний вывод на страницу, то можно так:
Этот код отключит экземпляры CWebLogRoute и экземпляры всех его потомков (например CProfileLogRoute).
Код: Выделить всё
foreach( Yii::app()->log->routes as $route ){
if( $route instanceof CWebLogRoute ){
$route->enabled=false;
}
}