Depura tus aplicaciones Symfony como un profesional
Ladybug es una librería que simplifica la depuración de aplicaciones PHP. Ladybug
reemplaza a las tradicionales funciones var_dump()
y print_r()
de una manera
mucho más útil y eficaz. Ladybug ha sido creado por Raúl Fraile
y se integra perfectamente con Symfony2.
Instalación
Si programas aplicaciones con Symfony lo mejor es que instales el bundle de LadyBug, que ya incluye la librería LadyBug.
Para ello, añade en primer lugar la siguiente dependencia en tu archivo
composer.json
:
{ "require": { "raulfraile/ladybug-bundle": "dev-master" } }
Después, instala las nuevas dependencias ejecutando el siguiente comando:
$ composer update
(Para que te funcione el anterior comando, debes tener instalado Composer globalmente, tal y como se explica en la guía de instalación de Composer)
Por último, registra el nuevo bundle en el archivo AppKernel.php
:
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new RaulFraile\Bundle\LadybugBundle\RaulFraileLadybugBundle(), ); // ... }
Si todavía utilizas Symfony 2.0, puedes consultar las instrucciones de instalación de Ladybug en Symfony 2.0.
Configuración
Ladybug ya está configurado y listo para usar nada más descargarlo, pero si quieres modificar su comportamiento, puedes utilizar las siguientes opciones de configuración:
# app/config/config.yml raul_fraile_ladybug: # indica si por defecto las variables muestran expandidos sus contenidos general: expanded: true object: # si utilizas objetos complejos, aumenta este número max_nesting_level: 3 # utiliza el valor 'false' para ocultar cada parte del objeto show_data: true show_classinfo: true show_constants: true show_methods: true show_properties: true # si utilizas colecciones y arrays muy complejos, aumenta este número array: max_nesting_level: 8 processor: active: true bool: html_color: #008 cli_color: blue float: html_color: #800 cli_color: red int: html_color: #800 cli_color: red string: html_color: #080 cli_color: green show_quotes: true css: path: /asset/tree.min.css
Depurando como un profesional
Imagina que un determinado controlador de tu aplicación Symfony no está mostrando
la información adecuada. En vez de buscar en los logs de Symfony o en el profiler
la consulta a la base de datos, decides hacer un var_dump()
directamente sobre
la entidad de Doctrine2. Un minuto después el navegador se te cuelga debido a las
infinitas recursiones de los objetos de Doctrine2.
Con Ladybug solo tienes que añadir una llamada al método ld()
(o su equivalente
más largo llamado ladybug_dump()
) para mostrar el contenido de esa variable:
<?php // ... class DefaultController extends Controller { public function portadaAction($ciudad) { $em = $this->getDoctrine()->getEntityManager(); $oferta = $em->getRepository('OfertaBundle:Oferta')->findOferta($ciudad); ld($oferta); // ... } }
Ahora en el navegador verás algo como lo siguiente:
Ladybug muestra el nombre y valor de todas las propiedades de la entidad, sus
métodos, la ruta del archivo que guarda la clase PHP, etc. Además, si una
propiedad es de tipo clase de PHP (como la propiedad fecha_publicacion
de
tipo DateTime
) Ladybug muestra un enlace directo al manual oficial de PHP.
Si además de mostrar el contenido de una variable quieres detener la ejecución
de la aplicación en ese punto, reemplaza por ld()
por ldd()
(que es un atajo
del método ladybug_dump_die()
).
Puedes pasar tantas variables como quieras a los métodos ld()
y ldd()
para
ver sus contenidos. Además, no importa lo complejo o raro que sea el contenido
de la variable, ya que Ladybug nunca colgará tu navegador. La siguiente
imagen muestra el volcado de todo el contenedor de inyección de dependencias de
Symfony2 (ld($this->container)
):
Además de ver cómodamente todos los servicios, parámetros y métodos del contenedor, Ladybug añade enlaces directos a la documentación de la API de Symfony (solo tienes que pinchar en esos pequeños iconos de Symfony que ves en el volcado de la variable).
Ladybug también cuenta con otros métodos interesantes:
ladybug_dump_ini([$extension])
, vuelca todas las opciones de configuración de PHP o de la extensión que le indiques.ladybug_dump_ext()
, vuelca todas las extensiones de PHP que están cargadas.ladybug_dump_return($formato, $variable[, $variable2, ...])
, devuelve el volcado de los contenidos de las variables en el formato indicado en el argumento$formato
. Este formato puede ser YML, JSON, XML y PHP.
La única limitación es que en las plantillas Twig solo existe un filtro definido
para Ladybug. Se trata del filtro correspondiente al método ld()
:
{# volcar el contenido de la variable 'oferta' #} {{ oferta | ld }} {# ... #}
Por último, si utilizas el bundle de Ladybug para Symfony también puedes volcar
las variables directamente al profiler de Symfony, en vez de mostrarlas por
pantalla. Para ello, utiliza el método log()
del servicio ladybug
:
<?php // ... class DefaultController extends Controller { public function portadaAction($ciudad) { $em = $this->getDoctrine()->getEntityManager(); $oferta = $em->getRepository('OfertaBundle:Oferta')->findOferta($ciudad); $this->get('ladybug')->log($oferta); // ... } }
Activación selectiva del bundle
Como cualquier otro bundle relacionado con la depuración de aplicaciones, se recomienda activarlo solamente cuando ejecutes la aplicación en el entorno de desarrollo.
Para ello, no registres el bundle tal y como se mostró anteriormente, y utiliza en su lugar el siguiente código:
<?php // app/AppKernel.php public function registerBundles() { // ... if (in_array($this->getEnvironment(), array('dev', 'test'))) { // ... $bundles[] = new RaulFraile\Bundle\LadybugBundle\RaulFraileLadybugBundle(); } }
Otros recursos
- Repositorio oficial de la librería Ladybug
- Notificar errores sobre el bundle o sobre la librería.
¿Has visto algún error?
Avísanos en [email protected] para que podamos corregirlo. Gracias.
Proyectos Symfony destacados
La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.