Страница 1 из 1
Отключение вывода информации профайлера в экшене
Добавлено: 2010.09.01, 20:42
Ryadnov
Нужно чтоб в определенном экшене, который к примеру отдает файл, не выводилась информация профайлера.
die() не предлагать)
(когда-то проскакивало на форуме, но поиск ничего не дает)
Re: Отключение вывода информации профайлера в экшене
Добавлено: 2010.09.01, 22:44
slavcodev
Yii::app()->end();
Re: Отключение вывода информации профайлера в экшене
Добавлено: 2010.09.02, 09:59
Ryadnov
Спасибо, но это не верно.
в 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'));
но хотелось бы, в конкретном экшене, оставить маршрут на
CFileLogRoute, а остальные удалить
Re: Отключение вывода информации профайлера в экшене
Добавлено: 2010.09.02, 10:38
slavcodev
А выключить профайлер не получается?
CProfileLogRoute::$enabled
или воспользоваться фильтром, чтоб проверить активный экшн
CProfileLogRoute::$filter
Re: Отключение вывода информации профайлера в экшене
Добавлено: 2010.09.06, 14:34
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;
}
обычно добавляю в компонент.
Re: Отключение вывода информации профайлера в экшене
Добавлено: 2010.09.07, 11:55
Ryadnov
@mc-bear
не получилось
@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, т.к. она в массив инициализированных компонентов добавляет массив настроек компонента
Я не правильно её готовлю или баг?
Re: Отключение вывода информации профайлера в экшене
Добавлено: 2011.10.16, 13:02
pls-kick-me
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++)
Re: Отключение вывода информации профайлера в экшене
Добавлено: 2012.12.19, 05:25
KiTE
Если цель отключать любой посторонний вывод на страницу, то можно так:
Код: Выделить всё
foreach( Yii::app()->log->routes as $route ){
if( $route instanceof CWebLogRoute ){
$route->enabled=false;
}
}
Этот код отключит экземпляры CWebLogRoute и экземпляры всех его потомков (например CProfileLogRoute).