framework.zend.com
Stable релиз 2.0 / 1.12

ZFDebug - debug панель для Zend Framework

К комментариям

Сегодня попробовал в работе ZFDebug - панель для Zend Framework, содержащая различную отладочную информацию. Впечатления положительные, поэтому расскажу подробнее, возможно не все еще знают про эту панель.

Панель ZFDebug выполнена в виде плагина для Front контроллера, и выглядит как небольшая компактная панель отображающаяся внизу страницы. Что не маловажно, решение кроссбраузерно. В отличие например от решения для firebug о котором я писал раньше.

Возможности

Поддерживает следующие возможности:

  • Cache - информация о Zend_Cache и акселераторе APC;
  • Database - список всех запросов к базе данных с временем их выполнения;
  • Exception - информация об ошибках и исключениях;
  • File - информация о подключаемых файлах, количество, размер;
  • Html - информация о подключенных таблицах стилей и javascript файлов. Ссылка на валидацию;
  • Memory - максимальный размер использованной памяти, памяти использованной в контроллере, а также пользовательские замеры;
  • Registry - содержимое Zend_Registry;
  • Time - информация о времени выполнения страниц, контроллеров, пользовательские замеры.;
  • Variables - информация о переменных вида, данные запроса, содержимое массивов $COOKIE и $POST;

Установка

Скачайте архив http://code.google.com/p/zfdebug/downloads/list
Разместите папку в каталоге библиотек на том же уровне что и папка Zend
Панель для работы использует библиотеку JQuery, по умолчанию будет произведена попытка ее подключения по адресу http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js

Если у вас версия ZF 1.8 вставьте следующий код в ваш bootstrap файл:

    protected function _initZFDebug()
{
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('ZFDebug');

$options = array(
'plugins' => array(
'Variables',
'File' => array('base_path' => '/путь/к/проекту'),
'Memory',
'Time',
'Registry',
'Exception',
'Html',
)
);

// Настройка плагина для адаптера базы данных
if ($this->hasPluginResource('db')) {
$this->bootstrap('db');
$db = $this->getPluginResource('db')->getDbAdapter();
$options['plugins']['Database']['adapter'] = $db;
}

// Настройка плагина для кеша
if ($this->hasPluginResource('cache')) {
$this->bootstrap('cache');
$cache = $this-getPluginResource('cache')->getDbAdapter();
$options['plugins']['Cache']['backend'] = $cache->getBackend();
}

$debug = new ZFDebug_Controller_Plugin_Debug($options);

$this->bootstrap('frontController');
$frontController = $this->getResource('frontController');
$frontController->registerPlugin($debug);
}

Если у вас версия ZF ниже 1.8 используйте следующий код:

// Оставьте ключ 'Database' пустым, произойдет попытка получить адаптер по умолчанию из Zend_Db_Table

$options = array(
// 'jquery_path' => 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js',
'plugins' => array('Variables',
'Html',
'Database' => array('adapter' => array('standard' => $db)),
'File' => array('base_path' => 'path/to/application/root'),
'Memory',
'Time',
'Registry',
'Cache' => array('backend' => $cache->getBackend()),
'Exception')
);

$debug = new ZFDebug_Controller_Plugin_Debug($options);

$frontController = Zend_Controller_Front::getInstance();
$frontController->registerPlugin($debug);

Переменная $options может быть массивом или объектом Zend_Config со следующими ключами

  • z-index: Расположение панели (255, top)
  • image_path: Путь к иконкам для панели (если передан null для формирования изображений используется base64 кодирование)
  • jquery_path: Путь к JQuery
  • plugins: Список подключаемых плагинов.

У меня все завелось довольно быстро.

Кстати в скачиваемом архиве есть еще плагин Auth, но он, видимо, еще не доведен до нужной кондиции поэтому не работает.

При желании можно расширить панель своими плагинами.

И напоследок, несколько скриншотов панели в действии:







 

метки: ZFDebug
Лучший способ следить за обновлениями сайта это подписаться на RSS
Если информация была полезной для вас, вы можете поддержать сайт.
Комментарии:
AndKul 19.06.2009 11:59 #
Прикрутил себе, в файре кодировка слетает вместо UTF фигня какая то. А так ниче.
Ответить
никита 28.07.2009 13:13 #
как решил проблему?
Ответить
AndKul 13.08.2009 15:35 #
никак
Ответить
Артур 21.12.2009 11:41 #
У меня работает через раз,а точнее работает-работает,потом слетает - поэтому я временно его отключаю,потом обратно.согласен не удобно,но как сделать иначе пока не нашел,и перекодируй файлы в UTF-8(или в ту,в которой ты работаешь) пробежись пой файлам
Ответить
Илья 12.03.2010 07:25 #
Можно поменять в файле ZFDebug\Controller\Plugin\Debug.php
строчку $response->setBody(preg_replace('/(<head.*>)/i', '$1' . $this->_headerOutput(), $response->getBody())); на $response->setBody(str_ireplace('</head>', $this->_headerOutput() . '</head>', $response->getBody())); (если у вас на сайте изысков особых нету).
Ответить
Илья 12.03.2010 07:29 #
Можно поменять в файле ZFDebug\Controller\Plugin\Debug.php
строчку $response->setBody(preg_replace('/(<head.*>)/i', '$1' . $this->_headerOutput(), $response->getBody())); на $response->setBody(str_ireplace('</head>', $this->_headerOutput() . '</head>', $response->getBody())); (если у вас на сайте изысков особых нету).
Ответить
IgorN 20.06.2009 12:44 #
Полезная тулза. Использую.
Ответить
Shumkov 23.06.2009 14:10 #
Я так понимаю что выводить лог в нее нельзя пока да?
Ответить
Александр Махомет 23.06.2009 14:14 #
Судя по всему надо расширять.
Ответить
Yaroslav Vorozhko 24.06.2009 16:26 #
Интересно как работает опция 'jquery_path'. У меня уже подключен jquery и я не хотел бы, чтоб он был подключен повторно. Но, как это сделать непонятно.
Может кто сталкивался с таким?
Ответить
mipa 26.06.2009 16:57 #
А какая разница сколько раз он подключен? Если он сидит в кеше, то из кеша и достанет его. Если путь, конечно, одинаковый.
Ответить
SLIM 06.07.2009 19:24 #
Проблема в том что эта тулза у jquery прописывает jQuery.noConflict() и все твои скрипты начинающиеся на $. перестают работать, исправляется это путем правки исходников или расширением, так же в исходниках есть вещь одна непонятная, которая наверняка будет тормозить код с большим HTML:
    protected function _output($html)
    {
        $response->setBody(preg_replace('/(<head.*>)/i', '$1' . $this->_headerOutput(), $response->getBody()));
        $response->setBody(str_ireplace('</body>', '<div id="ZFDebug_debug">'.$html.'</div></body>', $response->getBody()));
    }
поправил сие на
    protected function _output($html)
    {
// SLIM fix 3.07.2009
        $response = $this->getResponse();
$response->appendBody($this->_headerOutput() . '<div id="ZFDebug_debug">'.$html.'</div>');
    }
Ответить
maxyc 23.07.2009 15:39 #
ребят, что на хабре что тут. вас не смущают 117 инклудов? мож я просто пальцы гну со своими 10 инклудами, просто мне кажется мои проекты бы упали под 120 инклудами на чела
Ответить
Александр Махомет 23.07.2009 16:36 #
Это цена гибкости и универсальности. При наличии акселератора все работает довольно шустро.
Ответить
nerezus 22.10.2009 09:44 #
А разве должно пугать? Чем дебаг от релиза отличается, рассказать?)
Ответить
spectro 01.11.2009 17:26 #
если можно, то расскажите :) действительно интересно,что вы имеете ввиду.
Ответить
troffman 28.03.2010 14:04 #
У вас сервер стоит в дебаг режиме под нагрузкой??
Ответить
Maxim 14.12.2009 16:31 #
Ребят, а если я не использую bootstrap файл вообще?
Ответить
Maxim 14.12.2009 16:32 #
Как тогда подключить данную панель?
Ответить
Алексей 16.03.2010 02:54 #
Для тех у кого была проблема с кодировкой. Которая слетает через раз, я не могу точно сказать с чем это связано, просто посмотрел результирующий html и заметил, что код плагина вставляется сразу за тегом <head>, а мета тег <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> с указанием кодировки находиться ниже всего этого дела. На самом деле проблемы быть не должно, но может быть браузер не дождавшись ответа от google, откуда берётся jquery, может по другим причинам, не может правильно определить кодировку и скидывает её на ту, что для него идёт по умолчанию.

Решение простое, подсовывать текст плагина перед закрывающим тегом </head>

Лечим файл ZFDebug/Controller/Plugin/Debug.php

Находим метод  protected function _output($html)

и заменяем замену регуляркой
$response->setBody(preg_replace('/(<head.*>)/i', '$1' . $this->_headerOutput(), $response->getBody()));

На следующую:
$response->setBody(str_ireplace('</head>', $this->_headerOutput() . '</head>', $response->getBody()));

После этого изменения браузер ставит кодировку в нужную мне без ошибок.

Так же проверьте заголовок, который отдаёт вам сервер под названием Content-Type, может в нём указывается неверная кодировка.

Ответить
makedon 04.04.2010 02:55 #
Подключение плагина Doctrine в ZFDebug
http://blog.routydesign.com/?p=100
Ответить
Антон 11.06.2010 12:52 #
Ожидал поиметь нечто подобное Web Debug Toolbar от symfony...
Ну ей богу господа, это же убожество какое то! Причём тут Debug ?!
Ответить
Denkart 29.02.2012 14:18 #
Спасибо разработчикам и автору статьи.

У меня, как у новичка, первый вопрос который возник, это какие показания считаются усреднено нормальными или максимально допустимые, если предположить, что возможности увеличения мощности сервера на котором разрабатывается приложение не существует.
Ответить
Уважаемые пользователи. Комментарии не для того чтобы:
  1. Спрашивать почему у вас не работает код, для этого есть тема форума закрепленная за статьей.
  2. Спрашивать как реализовать ту или иную функциональность, для этого необходимо создать свою тему на форуме.

Комментарии для того чтобы: высказать свое аргументированное мнение о статье, указать какие участки вызывают непонимание, что нужно исправить/улучшить, просто сказать спасибо.

Комментарии имеют древовидную структуру.
Если вы хотите ответить на определенный комментарий - нажмите на ссылку "Ответить" возле этого комментария.

Комментарии не соответствующие этим правилам могут быть удалены. Спасибо за понимание.
Комментарии временно отключены, вы можете воспользоваться форумом.