VarDumper — новый компонент в Symfony 2.6

http://symfony.com/blog/new-in-symfony-2-6-vardumper-component
  • Перевод
Несколько дней назад состоялся релиз Symfony 2.6.0, который содержит множество интересных нововведений. Одним из наиболее важных является компонент VarDumper.

VarDumper призван заменить всем известную функцию var_dump() более современной и функциональной альтернативой — функцией dump().

Перед ее использованием убедимся, что DebugBundle подключен в AppKernel:

// app/AppKernel.php
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            // ...
        );

        if (in_array($this->getEnvironment(), array('dev', 'test'))) {
            $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
           // ...
        }
    }

    // ...
}


Теперь вы можете заменить все вызовы функции var_dump() на новый и более короткий dump(). В отличие от var_dump(), вы можете безопасно использовать dump(), чтобы отобразить содержимое любых переменных, включая переменные с циклическими ссылками, такие как сущности Doctrine.

Рассмотрим, для примера, контроллер, который целиком выводит контейнер Symfony и объект Request:

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
    public function indexAction(Request $request)
    {
        dump($this->container, $request);
        // ...
    }
}


При отображении этого контроллера в браузере, вы увидите новую панель dump, которая записывает все запрошенные переменные и кратко показывает их содержимое:



При клике на панель вы получите полное содержимое этих переменных, включая информацию о ссылках, public/protected/private свойствах и методах, неограниченный уровень вложенности и т.д.:



В дополнение к интеграции с отладочной панелью Symfony, компонент достаточно умен, чтобы обнаружить, используете ли вы exit или die() в коде. В этих случаях переменные пишутся в стандартный вывод.

VarDumper также содержит тег {% dump %} и функцию {{ dump() }} для проверки переменных прямо из шаблонов Twig. Тег {% dump %} показывает переменные в отладочной панели (например, {% dump variable1, variable2 %}). Отличный вариант, когда вывод шаблона не должен изменяться.

Функция {{ dump() }} наоборот отображает содержимое переменных прямо в шаблоне (например, {{ dump(variable1, variable2) }}).

Компонент VarDumper поставляется с Symfony начиная с версии 2.6.0, но если какие-то ваши проекты застряли на версиях 2.3, 2.4 или 2.5, вы можете установить debug-bundle следующим образом:

$ composer require --dev tchwork/debug-bundle


Подробнее можно почитать в документации компонента VarDumper, а так же статью Расширенное использование компонента VarDumper.
Поделиться публикацией
Похожие публикации
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 21
  • –6
    Зачем пользоваться var_dump, если можно использовать отладчик?
    Удобство и производительность этих инструментов даже сравнивать нельзя.

    Фабиен стареет :(
    • +9
      Часто быстрее вывести переменную и обновить страницу, нежели использовать отладчик, что тем не менее не отрицает удобство использования…

      • –1
        yujin1st
        > Часто быстрее вывести переменную и обновить страницу, нежели использовать отладчик, что тем не менее не отрицает удобство использования…
        Писать строку и подключать сторонний модуль быстрее, чем кликнуть мшью на полях IDE? Не поверю :)

        Rikcon
        Шаред — это production. С него берутся логи и читаются. Отладчик же используется на dev средах.

        skobkin обычно до этих сервисов (до их dev-версий) можно достучаться с локальных машин. А можно использовать vagrant с предустановленными и настроенными версиями этих сервисов.
        • 0
          Любой приложение не появляется из воздуха, а пишется планомерно. На одном из этапов и можно подключить модуль. Никто не говорит делать это каждый раз, когда нужно узнать про переменную.
          Вы правы про production — там есть логи, но мы и говорим о разработке на локальной машине, нет?
          И все равно, ничто не отменяет случай вывода нужной переменной/информации только для разработчика именно на рабочем сервере (именно вывода, никто не говорит про плохую привычку правок на лету)
          • +3
            VarDumper по умолчанию как я понимаю идет в Symfony2.6 так что подключать ничего не нужно. remote_autostart и т.д. настроен далеко не у всех. + посмотрите, у вас в отдельной панельке ВСЕ вардампы. Это очень удобно. Это намного удобнее ватчеров и экспрешенов, ползаньям между бряками что бы посмотреть что было и что стало… Просто рядышком полная история изменения состояния. Причем никаких задержек по времени. Поправил код — обновил страницу — сравнил состояния — все ок. Может быть у вас логика работы привязана к текущему времени, может вы производительность при этом еще замеряете… мало ли кейсов.

            Словом… не вижу в этом ничего плохого. Зато ленивые разработчики не запихнут вардампы на продакшен.
            • 0
              Самостоятельное подключение DebugBundle требуется при обновлении с более старых версий Symfony.
            • 0
              Ага. Например, Vagrant с предустановленной 1С и кастомной конфигурацией, к которой никто веб-разработчика не подпустит :)
          • +2
            Есть еще люди которые хотстятся на шаредах, там тебе ни Xdebug, ни какого-либо другого дебагера).
            Как раз сейчас нахожусь в таком положении.
            • +2
              Шареды… симфони… ремоут дебаг… Мне кажется что-то из этих трех пунктов просто лишнее. Не пробовали поднять у себя локально все в каком vagrant-боксе?
              • 0
                Я не о симфони, я в общем )

                skobkin ниже написал то что хотел написать я.

                К моему огомнейшому сожалению клиенты (от мала до велика) не понимают необходимости в 2ух серверах 1- dev 2- production.
                Он на джино оплатил шаред и доволен, и его не колыхают никакие уговоры по поводу dev сервера.

                Я для себя лично оплачиваю VDS и там стараюсь разрабатывать, потом переносить к нему, но если ему приспичит крайне быстро что-то поправить просто не остается времени на деплой на продакшн, по-этому приходится нарушать собственные правила и разрабатывать на продакшене…
            • +1
              Не во всех ситуациях можно использовать отладчик. Как бы это ни было прискорбно, не везде организован идеальный процесс разработки. Где-то есть системы, которые завязаны на других сервисах и домашнюю dev-версию запустить не выйдет. Да, это плохо, но это тоже нужно отлаживать.
              Я не сторонник такого, но понимаю, что эта вещь будет нужна.
              • +1
                например, для отладки TWIG шаблонов DUMP гораздо удобнее отладчика.

                Кроме того, скорее всего в prod окружении dump вообще ничего не будет делать, тогда dump'ы можно не боятся оставить в продакшене, это тоже очень удобно.
              • +1
                Автор прозрачно намекает, что VarDumper — это и есть отладчик.
                • +1
                  Занятный релиз, если самым интересным в нем является улучшенный дампер :)
                  • +1
                    Это только одна из плюшек запиленных в 2.6. Самая ли интересная? Кому как. Мне например понравилась Bootstrap тема для формы и неcколько удобных шорткат-методов в контроллере: sfhub.ru/?p=108.
                    • 0
                      >> удобных шорткат-методов в контроллере

                      А что мешало раньше их для себя в корневом контроллере организовать?
                      • 0
                        Собственно так и делали, и судя по тому, что их добавили в SE, не только мы :)
                    • 0
                      Ага, только дампер в релизе :) Изменения
                    • 0
                      А где эти панели должны появляться?
                      Я не использую симфони в своём проекте, просто попробовал в композере подключить «symfony/var-dumper»: «2.*» — функция dump() печатает просто переменную на экран в отформатированном виде, там где я его вызвал. Специальных панелей нет, указателя строки где было вызвано тоже не вижу. К стати, а можно как-то получить все ветки развёрнутые по умолчанию, или по крайней мере до какого-то уровня?
                      • 0
                        Они будут появляться в Symfony Debug Bar, к сожалению не располагаю информацией работает ли этот дебаг бар отдельно от симфони.
                        • 0
                          Ну… не совсем. Саму дебаг панель можно прикрутить к любому фреймворку на базе http kernel и twig, но интеграцией занимаются другие бандлы судя по всему.

                          Проще взять симфони или написать интеграцию в панельки для другого фреймворка, которым вы пользуетесь.

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