Aller au contenu principal

Gestion des erreurs

Comment gérer les erreurs dans une application Symfony en utilisant l'injection de dépendance

Notions théoriques

La gestion des erreurs est une partie essentielle de tout développement d'application.

Symfony fournit plusieurs outils pour aider à gérer les erreurs :

  • des exceptions,
  • des logs
  • et des environnements de développement et de production distincts.

Symfony transforme toutes les erreurs PHP en exceptions, ce qui signifie que vous pouvez utiliser des blocs try/catch pour gérer les erreurs.

Symfony fournit également plusieurs classes d'exceptions spécifiques que vous pouvez utiliser pour gérer les erreurs de différentes manières.

Exemple de mise en application

Supposons que nous voulons vérifier si un joueur existe avant de créer un personnage pour lui.

Nous pouvons le faire en injectant le repository de Player dans notre contrôleur.

Si aucun joueur n'est trouvé, nous pouvons lancer une NotFoundHttpException :

use App\Entity\Player;
use App\Repository\PlayerRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;

class GameController extends AbstractController
{
public function __construct(
private PlayerRepository $playerRepository
) {}

#[Route('/game/create-character/{playerId}', name: 'create_character')]
public function createCharacter(int $playerId): Response
{
$player = $this->playerRepository->find($playerId);

if ($player === null) {
throw $this->createNotFoundException('No player found with id ' . $playerId);
}

// ...

return new Response('Character created!');
}
}

Test de mémorisation/compréhension


Comment injecte-t-on un repository dans un contrôleur Symfony ?


Quelle méthode utilise-t-on pour lancer une exception 404 dans Symfony ?


Comment vérifie-t-on si un utilisateur est autorisé à effectuer une action dans Symfony ?



TP pour réfléchir et résoudre des problèmes

Votre défi pour aujourd'hui consiste à modifier votre action de création de personnage pour gérer les erreurs qui peuvent survenir lors de la création d'un personnage.

Vous devriez vérifier si le joueur existe et si l'utilisateur est autorisé à créer un personnage pour ce joueur. Utilisez l'injection de dépendance pour tous les services nécessaires.

Une solution