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
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
Vous devez être connecté pour voir le contenu.