Lire des données

Comment récupérer des données de la base de données avec le Repository
Petite vérification
Avant de commencer, vérifiez si vous savez encore...
- afficher le contenu de la méthode
create()dePlayerControlleret vérifier qu'elle appelle bien successivementpersist()puisflush()sur l'EntityManager - visiter dans votre navigateur l'URL
http://localhost:8000/player/createet vérifier que la page affiche bien un message du type « Player created with id X » - consulter la table des joueurs de votre base de données et vérifier qu'une ligne portant le nom
Totoa bien été enregistrée
📌 Réponse attendue
Notions théoriques
Dans Symfony avec Doctrine, un repository est une classe contenant des méthodes pour récupérer des entités de la base de données.
Symfony crée automatiquement un repository pour chaque entité, que vous pouvez étendre pour ajouter vos propres méthodes de récupération.
Les principales méthodes pour récupérer des entités sont :
find,findOneBy,findBy,- et
findAll.
Vous pouvez créer des méthodes personnalisées dans le repository pour des requêtes plus spécifiques.
Exemple de mise en application
Voici un exemple d'utilisation du repository dans Symfony 7 pour récupérer tous les joueurs :
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;
class GameController extends AbstractController
{
#[Route('/game', name: 'game')]
public function index(PlayerRepository $playerRepository): Response
{
$players = $playerRepository->findAll();
return $this->render('game/index.html.twig', [
'players' => $players,
]);
}
}
Etudions ce code
public function index(PlayerRepository $playerRepository): Response
Symfony 7 utilise l'injection de dépendances pour injecter directement le repository dans la méthode du contrôleur.
$players = $playerRepository->findAll();
Cette ligne récupère tous les enregistrements de la table liée à l'entité Player.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Votre défi pour aujourd'hui consiste à afficher tous les joueurs
Ajoutons une action à notre GameController pour afficher tous les joueurs dans Symfony 7.
Ensuite créez une action index qui récupère tous les joueurs de la base de données et les passe à la vue.
Symfony injecte automatiquement le PlayerRepository grâce à l'autowiring.
Il est préférable de l'injecter directement comme paramètre de la méthode du contrôleur
plutôt que d'utiliser $this->getDoctrine()->getRepository(Player::class).
L'injection de dépendances rend le code plus testable : dans les tests, on peut
substituer le repository par un mock sans modifier le contrôleur.