0,0
рейтинг
14 июня 2009 в 19:08

Разработка → 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
Перевод: Joakim Nygård
Александр Ильин @mecommayou
карма
30,7
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (46)

  • 0
    Спасибо большое за топик.
    Достаточно часто приходится воспроизводить часть функционала, предоставляемого этим плагином, какими-то своими наработками. А тут всё что нужно, легко и быстро.
  • 0
    А есть ли что-то подобное, но для «своих» движков. Насколько я знаю, есть модуль к firebug под названием firePHP. А есть ли подобный тулбар?
    • 0
      вырезать не такая проблема ;)
    • +1
  • +2
    В ZF есть нативная поддержка логгирования в консоль Firebug'а через FirePHP.
    • 0
      Скоро этот тулбар так же станет нативным и будет Zend_Toolbar в вики по нему есть уже кое что.
  • +2
    Стоило бы упомянуть, что изначально такой тулбар был в симфони, откуда был впоследствии адаптироан под кодигнитер и кохану.
  • 0
    Напишите еще, что он не работает при отключенном Zend_View.
    • –3
      Он и при выключенном мониторе не работает ;)
  • 0
    Забавно в зендовом инкубаре тоже есть
    • 0
      не досписал…
      framework.zend.com/wiki/display/ZFPROP/Zend_Toolbar+-+Ben+Scholzen?focusedCommentId=13631748
      Авторы разные, по сути примерно одинаковый функционал.
      • 0
        Ну я его оттуда примерно и нашел…
        • 0
          а почему авторы разные?
          • 0
            Zend_Toolbar это приведение Scienta ZF Debug к стандартам кодирования ZF. Scienta ZF Debug (ZFDebug) писался одним человеком, в инкубатор переработанную версию положил другой… OpenSource.
  • 0
    классный плагин, только я не могу его включить. подскажите пожалуйста что я делаю неправильно?

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

        Нужно для файрфокса какой-то плагин ещё ставить или нет?
        • 0
          Посмотрите, есть ли увас в шаблоне теги и. Просто свой код ZFDebug вставляет между ними и если их нет, то и вставлять не будет.
          • 0
            теги head и body
  • 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
        Нет, не помогло
        • 0
          Тогда firebug только в помощь.
    • 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
        Врядли ошибся, просто видимо пока от него мало пользы… code.google.com/p/zfdebug/wiki/Documentation_Plugin_Auth

        P.P.S. да, только в контексте панели это не имеет значения )
    • 0
      Насчет картинок… а в восьмом?
      • 0
        А восьмого у меня нет :) Про этот баг есть issue у них.

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