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
+18
1119
61
mecommayou 15,4

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

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

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

Нужно для файрфокса какой-то плагин ещё ставить или нет?
0
sunburn, #
Посмотрите, есть ли увас в шаблоне теги и. Просто свой код ZFDebug вставляет между ними и если их нет, то и вставлять не будет.
0
sunburn, #
теги head и body
0
alexbig, #
Мне одному это напомнило Symfony тулбар?
0
coolness, #
При включенном ZFDebug у меня отказывается работать плагин Slider из набора jQuery UI =(
0
mecommayou, #
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
coolness, #
Нет, не помогло
0
mecommayou, #
Тогда firebug только в помощь.
0
m17, #
Вот этот коварный код, вставленный плагином, вызывает такое:

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
MYPABEU, #
Помогайте.
Сколько пробовал — не получилось…
Точнее как… сам тулбар работает…


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

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
MYPABEU, #
Получается что переменная $db у меня пустая…
Странно что эксепшн на нее не выдается…

Но в офф вики написанно, что если мы ничего не передадим, то он будет юзать дефолтный адаптер…
0
mecommayou, #
Закомментируй строку 'Database' => array('adapter' => $db), или вместо $db укажи Zend_Db_Table::getDefaultAdapter()
0
MYPABEU, #
Если закомментировать, то палгин просто с тулбара уходит…
Если указывать на Zend_Db_Table::getDefaultAdapter(), то всеравно пишет что нет адаптера… =/
+2
mecommayou, #
//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
MYPABEU, #
Огромное спасибо! Все работает! Плюс Вам в карму!
0
m17, #
Спасибо!

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

resources.db.params.charset = "utf8"

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

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

Вопрос: не могли бы ва подробнее рассказать о 'Cache' => array('backend' => $cache->getBackend()),
0
mecommayou, #
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
easterism, #
понял. работает. спасибо
0
san, #
Попробовал сегодня панель — понравилось, написал тоже заметку, (7 скринов)
zendframework.ru/articles/zfdebug-panel-for-debugging

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

// 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
san, #
Врядли ошибся, просто видимо пока от него мало пользы… code.google.com/p/zfdebug/wiki/Documentation_Plugin_Auth

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

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