En multitud de ocasiones no somos capaces de depurar nuestro código PHP de forma sencilla, otras veces no hay rastro del error que se está produciendo ni en los logs del servidor web’, ’ni en los de la aplicación. En estos casos podemos acceder al entorno dev de symfony donde se nos mostrará mas información de debug.
Empecemos explicando como funcionan los entornos en Symfony, por defecto tenemos 3 entornos:
- dev: Desarrollo, los errores son mas detallados con información para debugear.
- prod: Producción, se habilitan las caches y se elimina la información de debug de los errores.
- test: Test, se utiliza para ejecutar tests funcionales que no son accesibles directamente vía navegador web.
Según el entorno que está en ejecución se cargará un fichero de configuración u otro:
- dev: config_dev.yml
- prod: config_prod.yml
- test: config_test.yml
NOTA: Todos los entornos tienen una configuración común, el fichero config.yml.
Para ejecutar un entorno u otro tan solo debemos acceder a app.php(prod) o app_dev.php(dev), por defecto symfony crea un .htaccess en el document root con:
DirectoryIndex app.php
De este modo por defecto servirá el entorno de producción, pero desarrollo seguirá estando accesible, para protegerlo restringiremos el acceso a la dirección de loopback:
if (!in_array(@$_SERVERREMOTE_ADDR, array('127.0.0.1', '::1'))) {
die('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}
NOTA: Si arrancamos el servidor integrado este siempre cargará por defecto el entorno dev, en este enlace podemos leerlo en la documentación oficial de symfony:
If you're using the built-in PHP web server, it knows to use the app_dev.php file.
Para comprobar que entorno está corriendo podemos utilizar Monolog como se explica en este artículo
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$logger = new Logger('debugLogger');
$logDir = $this->container->get('kernel')->getLogDir();
$logger->pushHandler(new StreamHandler($logDir.'/debugLog.log', Logger::NOTICE));
$logger->notice('debugLogger ENV is now ready');
$runningEnvironment=$this->container->get('kernel')->getEnvironment();
Para acceder a dev debemos hacerlo mediante un túnel ssh:
Luego tan solo queda acceder vía HTTP a través del túnel:
http://localhost:8000/app_dev.php