Skip to content
  • About
    • What is Symfony?
    • Community
    • News
    • Contributing
    • Support
  • Documentation
    • Symfony Docs
    • Symfony Book
    • Screencasts
    • Symfony Bundles
    • Symfony Cloud
    • Training
  • Services
    • Platform.sh for Symfony Best platform to deploy Symfony apps
    • SymfonyInsight Automatic quality checks for your apps
    • Symfony Certification Prove your knowledge and boost your career
    • SensioLabs Professional services to help you with Symfony
    • Blackfire Profile and monitor performance of your apps
  • Other
  • Blog
  • Download
sponsored by
  1. Home
  2. Documentation
  3. Symfony: The Fast Track
  4. French
  5. Diagnostiquer les problèmes

Diagnostiquer les problèmes

Mettre en place un projet, c'est aussi avoir les bons outils pour déboguer les problèmes. Fort heureusement, des assistants très utiles sont inclus avec le paquet webapp.

Découvrir les outils de débogage de Symfony

Pour commencer, le Symfony Profiler vous fait gagner un temps fou lorsque vous avez besoin de trouver l'origine d'un problème.

Si vous regardez la page d'accueil, vous devriez voir une barre d'outils en bas de l'écran :

/

La première chose que vous remarquerez, c'est le 404 en rouge. Rappelez-vous que ce n'est qu'une page de remplissage, car nous n'avons toujours pas défini de page d'accueil. Même si la page par défaut qui vous accueille est belle, c'est quand même une page d'erreur. Le code d'état HTTP correct est donc 404, pas 200. Grâce à la web debug toolbar, vous avez l'information tout de suite.

Si vous cliquez sur le petit point d'exclamation, vous obtenez le "vrai" message d'exception dans les logs du Symfony Profiler. Si vous voulez voir la stack trace, cliquez sur le lien "Exception" dans le menu de gauche.

Chaque fois qu'il y a un problème avec votre code, vous verrez une page d'exception comme celle-ci qui vous donnera tout ce dont vous aurez besoin pour comprendre le problème et d'où il vient :

//

Prenez le temps d'explorer les informations à l'intérieur du profileur Symfony en cliquant partout.

Les logs sont également très utiles dans les sessions de débogage. Symfony a une commande pratique pour consulter tous les logs (du serveur web, de PHP et de votre application) :

1
$ symfony server:log

Réalisons une petite expérience. Ouvrez public/index.php et cassez le code PHP (ajoutez foobar au milieu du code par exemple). Rafraîchissez la page dans le navigateur et observez le contenu des logs :

1
2
Dec 21 10:04:59 |DEBUG| PHP    PHP Parse error:  syntax error, unexpected 'use' (T_USE) in public/index.php on line 5 path="/usr/bin/php7.42" php="7.42.0"
Dec 21 10:04:59 |ERROR| SERVER GET  (500) / ip="127.0.0.1"

Le résultat est joliment coloré pour attirer votre attention sur les erreurs.

Comprendre les environnements Symfony

Comme le Symfony Profiler n'est utile que pendant le développement, nous voulons éviter qu'il soit installé en production. Par défaut, Symfony ne l'installe que pour les environnements de dev et de test.

Symfony intègre une notion d'environnement. Par défaut, il y en a trois, mais vous pouvez en ajouter autant que vous le souhaitez : dev, prod et test. Tous les environnements partagent le même code, mais ils représentent des configurations différentes.

Par exemple, tous les outils de débogage sont activés en environnement de dev. Dans celui de prod, l'application est optimisée pour la performance.

Basculer d'un environnement à l'autre peut se faire en changeant la variable d'environnement APP_ENV.

Lorsque vous avez déployé vers Platform.sh, l'environnement (stocké dans APP_ENV) a été automatiquement modifié en prod.

Gérer la configuration des environnements

APP_ENV peut être défini en utilisant des variables d'environnement "réelles" depuis votre terminal :

1
$ export APP_ENV=dev

L'utilisation de variables d'environnement réelles est la meilleure façon de définir des valeurs comme APP_ENV en production. Mais sur les machines de développement, avoir à définir beaucoup de variables d'environnement peut s'avérer fastidieux. Définissez-les plutôt dans un fichier .env.

Un fichier sensible .env a été généré automatiquement pour vous lorsque le projet a été créé :

.env
1
2
3
4
5
6
###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=c2927f273163f7225a358e3a1bbbed8a
#TRUSTED_PROXIES=127.0.0.1,127.0.0.2
#TRUSTED_HOSTS='^localhost|example\.com$'
###< symfony/framework-bundle ###

Tip

N'importe quel paquet peut ajouter plus de variables d'environnement à ce fichier grâce à leur recette utilisée par Symfony Flex.

Le fichier .env est commité sur le dépôt Git et liste les valeurs par défaut de la production. Vous pouvez surcharger ces valeurs en créant un fichier .env.local. Ce fichier ne doit pas être commité : c'est pourquoi le fichier .gitignore l'ignore déjà.

Ne stockez jamais des données secrètes ou sensibles dans ces fichiers. Nous verrons comment gérer ces données sensibles dans une autre étape.

Configurer votre IDE

En environnement de développement, lorsqu'une exception est levée, Symfony affiche une page avec le message de l'exception et sa stack trace. Lors de l'affichage d'un chemin de fichier, un lien, qui ouvre le fichier à la bonne ligne dans votre IDE favori, est ajouté. Pour bénéficier de cette fonctionnalité, vous devez configurer votre IDE. Symfony supporte de nombreux IDE par défaut ; j'utilise Visual Studio Code pour ce projet :

1
2
3
4
5
6
7
--- a/php.ini
+++ b/php.ini
@@ -6,3 +6,4 @@ max_execution_time=30
 session.use_strict_mode=On
 realpath_cache_ttl=3600
 zend.detect_unicode=Off
+xdebug.file_link_format=vscode://file/%f:%l

Les fichiers liés ne sont pas limités à des exceptions. Par exemple, le contrôleur dans la web debug toolbar devient cliquable après avoir configuré l'IDE.

Déboguer en production

Le débogage des serveurs de production est toujours plus délicat. Vous n'avez pas accès au Symfony Profiler par exemple. Les logs sont moins détaillés. Mais il est possible de consulter les logs :

1
$ symfony cloud:logs --tail

Vous pouvez même vous connecter en SSH sur le conteneur web :

1
$ symfony cloud:ssh

Ne vous inquiétez pas, vous ne pouvez rien casser facilement. Une grande partie du système de fichiers est en lecture seule. Vous ne serez pas en mesure de faire un correctif urgent en production, mais vous apprendrez une manière bien plus adaptée de le faire plus loin dans le livre.

Aller plus loin

  • SymfonyCasts : tutoriel sur les environnements et les fichiers de configuration ;
  • SymfonyCasts : tutoriel sur les variables d'environnement ;
  • SymfonyCasts : tutoriel sur la Web Debug Toolbar et le Profiler ;
  • Gérer plusieurs fichiers .env dans les applications Symfony.
Previous page Adopter une méthodologie
Next page Créer un contrôleur
This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.
TOC
    Version

    Symfony 5.4 is backed by

    Measure & Improve Symfony Code Performance

    Measure & Improve Symfony Code Performance

    Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).

    Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).

    Version:
    Locale:
    ebook

    This book is backed by:

    see all backers

    Symfony footer

    Avatar of Hubert Moreau, a Symfony contributor

    Thanks Hubert Moreau (@hmoreau) for being a Symfony contributor

    2 commits • 182 lines changed

    View all contributors that help us make Symfony

    Become a Symfony contributor

    Be an active part of the community and contribute ideas, code and bug fixes. Both experts and newcomers are welcome.

    Learn how to contribute

    Symfony™ is a trademark of Symfony SAS. All rights reserved.

    • What is Symfony?

      • What is Symfony?
      • Symfony at a Glance
      • Symfony Components
      • Symfony Releases
      • Security Policy
      • Logo & Screenshots
      • Trademark & Licenses
      • symfony1 Legacy
    • Learn Symfony

      • Symfony Docs
      • Symfony Book
      • Reference
      • Bundles
      • Best Practices
      • Training
      • eLearning Platform
      • Certification
    • Screencasts

      • Learn Symfony
      • Learn PHP
      • Learn JavaScript
      • Learn Drupal
      • Learn RESTful APIs
    • Community

      • Symfony Community
      • SymfonyConnect
      • Events & Meetups
      • Projects using Symfony
      • Contributors
      • Symfony Jobs
      • Backers
      • Code of Conduct
      • Downloads Stats
      • Support
    • Blog

      • All Blog Posts
      • A Week of Symfony
      • Case Studies
      • Cloud
      • Community
      • Conferences
      • Diversity
      • Living on the edge
      • Releases
      • Security Advisories
      • Symfony Insight
      • Twig
      • SensioLabs Blog
    • Services

      • SensioLabs services
      • Train developers
      • Manage your project quality
      • Improve your project performance
      • Host Symfony projects

      Powered by

    Follow Symfony