ZFDebug

http://jokke.dk/software/zfdebug
  • Перевод
ZFDebug представляет собой плагин для Zend Framework. В нем содержится полезная отладочная информация в небольшой панеле в нижней части каждой страницы. До версии 1.5 назывался Scienta ZF Debug Bar.

image

Время, память и количество запросов к базе данных видны с первого взгляда. Кроме того, есть информация об обработанных (included) файлах, списке доступных переменных шаблонов (view) и SQL запросы отображаются в отдельной панели (на рисунке база данных сконфигурирована с 2 адаптерами).

Существующие плагины

  • Cache: Информация о Zend_Cache и АПК.
  • Database: Полный список SQL запросов и время, для каждого из них.
  • Exception: Информация о ошибках и исключениях.
  • File: количество и размер файлов, обработанных PHP.
  • HTML: Количество внешних стилей и javascripts. Ссылка для подтверждения с W3C.
  • Memory: Максимальный размер использованной памяти, памяти использованная в контроллере дествий и поддержка пользовательского измерения памати.
  • Registry: Содержание Zend_Registry
  • Time: Время выполнения текужего запроса, время выполнения действия в контроллере и пользовательские таймеры. Кроме того, среднее, минимальное и максимальное время для запросов.
  • Variables: Список переменных шаблонов, данные о запросе и содержимое $ _COOKIE и $ _POST

Установка и использование


Разместите каталог ZFDebug в каталоге указанном в include_path. Затем добавьте следующий метод для загрузки вашего класса (ZF 1.8 +):

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

  $options = array(
    'plugins' => array('Variables',
              'Database' => array('adapter' => $db),
              'File' => array('basePath' => '/path/to/project'),
              'Memory',
              'Time',
              'Registry',
              'Cache' => array('backend' => $cache->getBackend()),
              'Exception')
  );
  $debug = new ZFDebug_Controller_Plugin_Debug($options);

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

* This source code was highlighted with Source Code Highlighter.


Подробнее можно узнать на странице проекта: zfdebug.googlecode.com
Поделиться публикацией
Похожие публикации
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 46
  • 0
    Спасибо большое за топик.
    Достаточно часто приходится воспроизводить часть функционала, предоставляемого этим плагином, какими-то своими наработками. А тут всё что нужно, легко и быстро.
    • 0
      А есть ли что-то подобное, но для «своих» движков. Насколько я знаю, есть модуль к firebug под названием firePHP. А есть ли подобный тулбар?
    • +2
      В ZF есть нативная поддержка логгирования в консоль Firebug'а через FirePHP.
      • 0
        Скоро этот тулбар так же станет нативным и будет Zend_Toolbar в вики по нему есть уже кое что.
      • +2
        Стоило бы упомянуть, что изначально такой тулбар был в симфони, откуда был впоследствии адаптироан под кодигнитер и кохану.
        • 0
          Напишите еще, что он не работает при отключенном Zend_View.
          • –3
            Он и при выключенном мониторе не работает ;)
          • 0
            Забавно в зендовом инкубаре тоже есть
          • 0
            классный плагин, только я не могу его включить. подскажите пожалуйста что я делаю неправильно?

            впринципе я не так уж много и делал. скачал новую версию ЗФ, закачал куда надо плагин. Далее дописал в бутстрап класс и что теперь?
            • 0
              Ты Zend_Application используешь или свой собственный bootstrap?
              Попробуй посмотреть еще тут: code.google.com/p/zfdebug/wiki/Installation
              • 0
                да, спасибо, я посмотрел. но так и не понял до сих пор.

                Нужно для файрфокса какой-то плагин ещё ставить или нет?
                • 0
                  Посмотрите, есть ли увас в шаблоне теги и. Просто свой код ZFDebug вставляет между ними и если их нет, то и вставлять не будет.
          • 0
            Мне одному это напомнило Symfony тулбар?
          • 0
            При включенном ZFDebug у меня отказывается работать плагин Slider из набора jQuery UI =(
            • 0
              code.google.com/p/zfdebug/wiki/Installation
              The $options parameter can be either an array or an instance of Zend_Config with the following keys (defaults in paranthesis)
              • z-index: Placement on the z-axis of the html output (255, top)
              • image_path: Path to plugin icons (null, embedded as base64 encoded data)
              • jquery_path: Specify a custom path to the jQuery script. Will only be included if not already part of the page. (http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js)
              • plugins: An array of plugins to show.


              Возможно нужно указать собственный jquery_path.
            • 0
              Вот этот коварный код, вставленный плагином, вызывает такое:

              var ZFDebugLoad = window.onload;
              window.onload = function(){
              if (ZFDebugLoad) {
              ZFDebugLoad();
              }
              jQuery.noConflict();
              ZFDebugCollapsed();
              };


              Вся магия в том, что даже если вы где-то дальше в коде явно подключаете jQuery, то при загрузке страницы (window.onload), всё равно будет вызван метод noConflict(), который замаскирует $, и, судя по всему, вызовет ещё какие-то побочные эффекты, препятствующие загрузке плагинов.

              Кратчайший путь решения проблемы для тех кто использует jQuery, это явно указать jquery_path и закомментировать строчку с вызовом noConflict():

              Файл: ZFDebug/Controller/Plugin/Debug.php
              Строка: 426

              // jQuery.noConflict();
            • 0
              Помогайте.
              Сколько пробовал — не получилось…
              Точнее как… сам тулбар работает…


              Но вот с БД как сконнектить — не знаю… Всегда говорит что «No adapter». =(
              • 0
                Ты адаптер через ресурс конфигурируешь?
                • 0
                  Через application.ini… Я с зендом второй день дружить пытаюсь только…
                  • 0
                    Ты в конфиге что передаешь сюда?
                    'Database' => array('adapter' => $db)
                    • 0
                      Сейчас…

                      application.ini
                      ;
                      ; Database
                      ;
                      resources.db.adapter = "PDO_MYSQL"
                      resources.db.params.host = "localhost"
                      resources.db.params.username = "user"
                      resources.db.params.password = "pass"
                      resources.db.params.dbname = "database"
                      resources.db.isDefaultTableAdapter = true


                      bootstrap.php
                      /**
                      * Bootstrap zend debuging for application resources
                      */
                      protected function _initZFDebug()
                      {
                      $autoloader = Zend_Loader_Autoloader::getInstance();
                      $autoloader->registerNamespace('ZFDebug');
                      $options = array(
                      'plugins' => array('Variables',
                      'Database' => array('adapter' => $db),
                      'File',
                      'Memory',
                      'Time',
                      'Registry',
                      'Exception')
                      );
                      $debug = new ZFDebug_Controller_Plugin_Debug($options);
                      $this->bootstrap('frontController');
                      $frontController = $this->getResource('frontController');
                      $frontController->registerPlugin($debug);
                      }
                      • 0
                        Получается что переменная $db у меня пустая…
                        Странно что эксепшн на нее не выдается…

                        Но в офф вики написанно, что если мы ничего не передадим, то он будет юзать дефолтный адаптер…
                        • 0
                          Закомментируй строку 'Database' => array('adapter' => $db), или вместо $db укажи Zend_Db_Table::getDefaultAdapter()
                          • 0
                            Если закомментировать, то палгин просто с тулбара уходит…
                            Если указывать на Zend_Db_Table::getDefaultAdapter(), то всеравно пишет что нет адаптера… =/
                            • +2
                              //class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
                              $resource = $this->getPluginResource('db');
                              $db = $resource->getDbAdapter();
                              $options = array(
                                'plugins' => array('Variables',
                                  'Database' => array('adapter' => $db),
                                )
                              );


                              * This source code was highlighted with Source Code Highlighter.


                              ;============================================================================== ;DATABASE (application.ini)
                              ;==============================================================================
                              resources.db.adapter       = "Pdo_Mysql"
                              resources.db.params.host     = "localhost"
                              resources.db.params.port     = 3306
                              resources.db.params.username     = "***"
                              resources.db.params.password     = "***"
                              resources.db.params.dbname     = "***"
                              resources.db.isDefaultTableAdapter  = true
                              resources.db.profiler.enabled    = true
                              resources.db.profiler.class     = "Zend_Db_Profiler_Firebug"
                              resources.db.caseFolding       = true
                              resources.db.autoQuoteIdentifiers     = true
                              resources.db.allowSerialization     = true
                              resources.db.autoReconnectOnUnserialize  = true
                              resources.db.adapterNamespace    = "Zend_Db_Adapter"
                              resources.db.driver_options.1002    = "SET NAMES UTF8"


                              * This source code was highlighted with Source Code Highlighter.
                              • 0
                                Огромное спасибо! Все работает! Плюс Вам в карму!
                                • 0
                                  Спасибо!

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

                                  resources.db.params.charset = "utf8"

                                  вместо непосредственного указания запроса, как у вас

                                  resources.db.driver_options.1002 = "SET NAMES UTF8"
                                  • 0
                                    Оказывается да, для адаптеров:
                                    Zend_Db_Adapter_Mysqli
                                    Zend_Db_Adapter_Oracle
                                    Zend_Db_Adapter_Pdo_Mysql
                                    Zend_Db_Adapter_Pdo_Oci
                                    Zend_Db_Adapter_Pdo_Pgsql
                • 0
                  отличная штука, поставил себе и написал автору плагина issue по поводу отключенного зендовского представления

                  Вопрос: не могли бы ва подробнее рассказать о 'Cache' => array('backend' => $cache->getBackend()),
                  • 0
                    application.ini:
                    resources.frontController.plugins.XXX = «XXX_Controller_Plugin»

                    class XXX_Controller_Plugin extends Zend_Controller_Plugin_Abstract
                    {
                      public function preDispatch(Zend_Controller_Request_Abstract $request)
                      {
                        global $application;

                        $bootstrap = $application->getBootstrap();

                        $frontendOptions = array(
                          'automatic_serialization' => true
                          );

                        $backendOptions = array(
                          'cache_dir'        => APPLICATION_PATH . DIRECTORY_SEPARATOR . 'cache'
                          );

                        $cache = Zend_Cache::factory(
                          'Core',
                          'File',
                          $frontendOptions,
                          $backendOptions
                        );

                        if ($bootstrap->hasResource('ZFDebug')) {

                          $frontController = Zend_Controller_Front::getInstance();
                          $zfDebug = $frontController->getPlugin('ZFDebug_Controller_Plugin_Debug');

                          $cachePlugin = new ZFDebug_Controller_Plugin_Debug_Plugin_Cache(array('backend' => $cache->getBackend()));
                          $zfDebug->registerPlugin($cachePlugin);
                        }

                        // Next, set the cache to be used with all table objects
                        Zend_Db_Table_Abstract::setDefaultMetadataCache($cache);
                      }
                    }


                    * This source code was highlighted with Source Code Highlighter.
                    • 0
                      понял. работает. спасибо
                  • 0
                    Попробовал сегодня панель — понравилось, написал тоже заметку, (7 скринов)
                    zendframework.ru/articles/zfdebug-panel-for-debugging

                    Там еще есть плагин Auth, но он у меня не подключился, походу не доделан.
                    И в 6-7 ие base64 картинки не пашут :)
                    • 0
                      Там видимо автор ошибся… надо сделать фикс, добавить этот плагин в список иначе он будет подключаться через назад, а там его соответственно не лежит.

                      // ZFDebug/Controller/Plugin/Debug.php line 62
                      public static $standardPlugins = array('Auth' /* ... */);


                      * This source code was highlighted with Source Code Highlighter.


                      P. S.
                      Насчет памяти… 5 метров для «Hello World» как-то помоему это дофига… нужно пробовать что-то с кешированием классов.

                      P. P. S.
                      Zend Framework уже есть 1.8.3
                    • 0
                      Насчет картинок… а в восьмом?
                      • 0
                        А восьмого у меня нет :) Про этот баг есть issue у них.

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