Дебаггер для Yii 1.1 портированный из Yii 2

Выкладываем свои наработки
Аватара пользователя
yuran
Сообщения: 77
Зарегистрирован: 2010.11.04, 22:50
Контактная информация:

Re: Дебаггер для Yii 1.1 портированный из Yii 2

Сообщение yuran »

Немного не по теме вопрос, на некоторых моих сайтах после установки расширения xdebug для php 5.3 появилась ошибка Maximum function nesting level of '100' reached, aborting! И мне пришлось записать в php.ini xdebug.max_nesting_level = 100000
Цифра такая 100000 как то пугает... главное большинству сайтов хватило дефолтного значения 100, нескольким 1000, а один перестал выдавать ошибку только при 100000. Гуру подскажите пожалуйста почему так и о чем это вообще говорит...
Аватара пользователя
yuran
Сообщения: 77
Зарегистрирован: 2010.11.04, 22:50
Контактная информация:

Re: Дебаггер для Yii 1.1 портированный из Yii 2

Сообщение yuran »

В общем отрубил его... не нужен он на продакшене:)
slyder
Сообщения: 10
Зарегистрирован: 2010.07.06, 17:47

Re: Дебаггер для Yii 1.1 портированный из Yii 2

Сообщение slyder »

День добрый.
Пытаюсь добавить свою панель, которая выводит SEO инфу, такую как pageTitle + дополнительные переменные.
Получаю Yii::app()->controller и он отдает DefaultController.
Есть какой-то метод получить контроллер, который выполнился в данный момент? Посмотрел панель Yii2RequestPanel, так там контроллер и экшен создаются по реквест-объекту. В моем случае это не подходит.
Аватара пользователя
KiTE
Сообщения: 112
Зарегистрирован: 2012.04.12, 14:47

Re: Дебаггер для Yii 1.1 портированный из Yii 2

Сообщение KiTE »

Yii::app()->controller это и есть контроллер который работает в данный момент. Если вы к нему обращаетесь из модуля, то он, естественно, вернет DefaultController. Суть дебаггера в том, что на рабочей странице сайта он сохраняет отладочную информацию, а на служебной странице модуля ее выводит.
Посмотрел панель Yii2RequestPanel, так там контроллер и экшен создаются по реквест-объекту. В моем случае это не подходит.
Там похожая ситуация. Стандартным способом получить текущий контроллер не получится. Запись логов происходит в момент onEndRequest, когда объект контроллера уже уничтожен.
slyder
Сообщения: 10
Зарегистрирован: 2010.07.06, 17:47

Re: Дебаггер для Yii 1.1 портированный из Yii 2

Сообщение slyder »

В тестовых целях добавил поле для сохранения ссылки на контроллер:

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

class Yii2Debug extends CApplicationComponent {
    public $ctrl = null; 
и далее в базовом контроллере

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

class Controller extends CController {
    public function init() {
        Yii::app()->debug->ctrl = Yii::app()->controller;
    } 
ну и само использование:

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

class SeoDebugPanel extends Yii2DebugPanel {
    public function save() {
        $controller = $this->getOwner()->ctrl;
        return array(
            'pageTitle'       => $controller->pageTitle,
            'pageDescription' => $controller->pageDescription,
            'pageKeywords'    => $controller->pageKeywords,
        );
    }
 
ИМХО не очень красивое решение. Как вариант думаю добавить метод для установки передачи данных в дебаг Yii::app()->debug->setData('name', $data),
т.к. сейчас как я понял их можно передать только через логгер Yii::log(serialize($data), CLogger::LEVEL_INFO, Yii2LogPanel::CATEGORY_DUMP);?

PS: И еще один момент, может не где не увидел в теме, но если в дебагере происходит ошибка, то панель дебагера просто не появляется, и нигде не могу её отследить, в логах тоже не нашел. Как его правильно отлаживать?
Аватара пользователя
KiTE
Сообщения: 112
Зарегистрирован: 2012.04.12, 14:47

Re: Дебаггер для Yii 1.1 портированный из Yii 2

Сообщение KiTE »

PS: И еще один момент, может не где не увидел в теме, но если в дебагере происходит ошибка, то панель дебагера просто не появляется, и нигде не могу её отследить, в логах тоже не нашел. Как его правильно отлаживать?
В дебаггере не должно быть ошибок. Это залог его работоспособности.
Если вы создаете новую панель, и в переопределенном save() возможно исключение, то такой кусок кода нужно экранировать.
browser_ff
Сообщения: 77
Зарегистрирован: 2012.07.19, 21:34

Re: Дебаггер для Yii 1.1 портированный из Yii 2

Сообщение browser_ff »

я был каким то образом сделал что бы кликабельные были места с ошибками в табе Log . Нажал на на ошибку на каком то файле что указан в логе и тебе сразу открылся бы он например (phpstorm, netbean ....) ...Правда я даже не представляю это вообще возможно или нет .. :)
Аватара пользователя
KiTE
Сообщения: 112
Зарегистрирован: 2012.04.12, 14:47

Re: Дебаггер для Yii 1.1 портированный из Yii 2

Сообщение KiTE »

В стандартной ситуации это невозможно.
Из соображений безопасности, веб-страница открытая в браузере ничего не знает о приложениях запущенных на вашем компьютере. А PHPStorm с NetBeans не создают протоколов как у скайпа, который можно использовать в url.
Максимум, можно вывести листинг кода с подсвеченной строкой. Но какой в этом смысл, когда, почти всегда, рядом открыта рабочая IDE, и тоже самое можно сделать парой хоткеев.
browser_ff
Сообщения: 77
Зарегистрирован: 2012.07.19, 21:34

Re: Дебаггер для Yii 1.1 портированный из Yii 2

Сообщение browser_ff »

Скажите а это нормально что вот так ругается Firebug ?

SecurityError: The operation is insecure.

у меня на эту строку:

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

if (window.localStorage && localStorage.getItem('yii2-debug-toolbar') == 'minimized') {
 

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

jQuery(function($) {
(function($){
$('<div>').appendTo('body').load('/debug/5338919d9c080/toolbar?language=en', function(){
if (window.localStorage && localStorage.getItem('yii2-debug-toolbar') == 'minimized') {
$('#yii2-debug-toolbar').hide();
$('#yii2-debug-toolbar-min').show();
} else {
$('#yii2-debug-toolbar-min').hide();
$('#yii2-debug-toolbar').show();
}
$('#yii2-debug-toolbar .yii2-debug-toolbar-toggler').click(function(){
$('#yii2-debug-toolbar').hide();
$('#yii2-debug-toolbar-min').show();
if (window.localStorage) {
localStorage.setItem('yii2-debug-toolbar', 'minimized');
}
});
$('#yii2-debug-toolbar-min .yii2-debug-toolbar-toggler').click(function(){
$('#yii2-debug-toolbar-min').hide();
$('#yii2-debug-toolbar').show();
if (window.localStorage) {
localStorage.setItem('yii2-debug-toolbar', 'maximized');
}
});
});
})(jQuery); 
Ответить