Aller au contenu principal

Les Services dans Symfony

Comment utiliser et créer des services dans Symfony pour une meilleure organisation du code

Notions théoriques

Dans Symfony, un service est un objet qui remplit une fonction spécifique dans votre application.

astuce

Les services sont au cœur de l'architecture de Symfony et permettent d'organiser et de réutiliser le code de manière efficace.

Les services sont gérés par le conteneur de services de Symfony, qui s'occupe de leur création et de leur injection de dépendances.

Cela permet de découpler les différentes parties de votre application et de faciliter les tests unitaires.

Exemple de mise en application

Pour créer un service dans Symfony, vous devez d'abord créer une classe qui représente ce service.

Par exemple, créons un service MessageGenerator qui génère des messages aléatoires :

// src/Service/MessageGenerator.php
namespace App\Service;

class MessageGenerator
{
public function getRandomMessage(): string
{
$messages = [
'Bonjour le monde !',
'Comment ça va ?',
'Bienvenue sur notre site !',
];

return $messages[array_rand($messages)];
}
}

Ensuite, vous pouvez utiliser ce service dans un contrôleur en l'injectant via le constructeur ou directement dans une méthode :

// src/Controller/DefaultController.php
namespace App\Controller;

use App\Service\MessageGenerator;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends AbstractController
{
#[Route('/', name: 'homepage')]
public function index(MessageGenerator $messageGenerator): Response
{
$message = $messageGenerator->getRandomMessage();

return $this->render('default/index.html.twig', [
'message' => $message,
]);
}
}
remarque

Symfony s'occupera automatiquement d'injecter le service MessageGenerator dans votre contrôleur.

Test de mémorisation/compréhension


Qu'est-ce qu'un service dans Symfony ?


Comment Symfony gère-t-il les services ?


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


Quel est l'avantage principal de l'utilisation des services dans Symfony ?



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

Votre défi pour aujourd'hui consiste à créer un service pour gérer les opérations liées à vos personnages

Vous devrez créer un service CharacterManager qui contiendra des méthodes pour :

  • créer un nouveau personnage,
  • calculer son niveau en fonction de son expérience,
  • et vérifier s'il peut passer au niveau suivant.
Une solution