Symfony framework has a debug mode that helps to debug application during development. This tutorial explains how to check if debug mode is enabled in Symfony 7 application.
We can specify the APP_ENV variable in the .env file. This variable defines the environment in which the application runs. By default, in the dev and test environments, debug mode is enabled and in the prod environment is disabled.
.env
APP_ENV=dev
Debug mode could be enabled or disabled by using a separate APP_DEBUG environment variable. Its value can be 1 or 0.
.env
APP_ENV=dev
APP_DEBUG=0
We can check debug mode in different parts of the application.
Controller - Method 1
If controller extends the AbstractController class, we can use the getParameter method to retrieve kernel.debug parameter from container.
src/Controller/TestController.php
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class TestController extends AbstractController
{
#[Route('/')]
public function index(): Response
{
$debug = $this->getParameter('kernel.debug');
return new Response($debug ? 'Enabled' : 'Disabled');
}
}
Controller - Method 2
If your controller does not extend the base controller, you can inject the value of the kernel.debug parameter in the controller.
config/services.yaml
services:
# ...
App\Controller\TestController:
tags: ['controller.service_arguments']
arguments: ['%kernel.debug%']
src/Controller/TestController.php
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class TestController
{
public function __construct(private bool $debug)
{
}
#[Route('/')]
public function index(): Response
{
return new Response($this->debug ? 'Enabled' : 'Disabled');
}
}
Note: don't forget to clear cache manually if debug mode is disabled.
Service
If we want to determine debug mode in the service, we can inject the value of the kernel.debug parameter.
config/services.yaml
services:
# ...
App\Service\TestService:
arguments: ['%kernel.debug%']
src/Service/TestService.php
<?php
namespace App\Service;
class TestService
{
public function __construct(private bool $debug)
{
}
}
Template
In the Twig template, we can use the global app variable. It gives access to the app.debug variable.
templates/test/index.html.twig
{{ app.debug ? 'Enabled' : 'Disabled' }}
src/Controller/TestController.php
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class TestController extends AbstractController
{
#[Route('/')]
public function index(): Response
{
return $this->render('test/index.html.twig');
}
}
The 2 Comments Found
In Symfony 7, do you find it more reliable to check this directly via the kernel parameters in the code, or do you prefer using a console command to verify the environment state before a push? Would love to hear which workflow you find most efficient
Hi,
It depends on specific situation. In code,
kernel.debugis the most direct way to check the environment state at runtime. For deployments, you could use console command.Leave a Comment
Cancel reply