Symfony Flashcards

(17 cards)

1
Q

Comment crée-t-on une nouvelle route dans Symfony pour afficher une page "À propos" ?

A

Pour créer une route “À propos”, on utilise l’attribut #[Route] au-dessus d’une méthode de contrôleur. Il faut spécifier le chemin URL et le nom de la route.

#[Route('/a-propos', name: 'app_about')]
public function index(): Response {
    return $this->render('about.html.twig');
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Comment protège-t-on une route Symfony pour qu’elle ne soit accessible qu’aux utilisateurs connectés ?

A

Pour restreindre l’accès, on utilise l’attribut #[IsGranted(‘ROLE_USER’)] sur la méthode ou la classe du contrôleur. On peut aussi configurer le fichier config/packages/security.yaml sous la section access_control pour lier des patterns d’URL à des rôles.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Comment affiche-t-on un message flash dans une vue Twig après une action réussie (par exemple, la création d’un élément) ?

A

On définit le message dans le contrôleur avec $this->addFlash(‘success’, ‘Action réussie !’);. Pour l’afficher dans Twig, on utilise la fonction app.flashes :

{% for message in app.flashes('success') %}
    <div class="alert alert-success">{{ message }}</div>
{% endfor %}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Comment crée-t-on une entité Doctrine pour représenter une table en base de données ?

A

On crée une entité via la console avec la commande symfony console make:entity. On suit ensuite les instructions pour ajouter des champs. Cela génère une classe PHP dans src/Entity avec des annotations/attributs décrivant la structure de la table.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Comment passer proprement un paramètre à une requête faite avec Doctrine ?

A

Il ne faut jamais injecter directement une variable dans une chaîne SQL. On utilise des paramètres nommés pour éviter les injections SQL :

$repository->createQueryBuilder('p')
    ->where('p.prix > :prixMin')
    ->setParameter('prixMin', 10)
    ->getQuery()->getResult();
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Comment applique-t-on un style CSS à un formulaire Symfony ?

A

Il existe trois méthodes principales :

Ajouter une classe directement dans le FormType via l’option ‘attr’ => [‘class’ => ‘ma-classe’].

Utiliser un thème de formulaire dans Twig : {% form_theme form ‘bootstrap_5_layout.html.twig’ %}.

Entourer les champs de balises HTML personnalisées dans le template Twig.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Comment crée-t-on un formulaire Symfony avec un champ de type email ?

A

Dans la classe de formulaire (FormType), on utilise le type EmailType importé de Symfony\Component\Form\Extension\Core\Type\EmailType.

$builder->add('email', EmailType::class);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

À quoi sert le fichier composer.json dans un projet Symfony ? Quel type d’information y trouve-t-on ?

A

Ce fichier est le cœur de la gestion des dépendances. On y trouve :

  • Les bibliothèques requises (require).
  • Les outils de développement (require-dev).
  • La configuration de l’autoloading (indique où PHP doit chercher les classes).
  • Les scripts à exécuter lors de certaines commandes.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

À quoi servent les services dans Symfony ?

A

Les services sont des objets conçus pour accomplir une tâche technique ou métier spécifique (ex: envoyer un e-mail, calculer des frais de port). Ils permettent de centraliser la logique pour qu’elle soit réutilisable partout et testable de manière isolée.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Quand on ajoute un nouveau champ à une entité Doctrine, quelles sont les étapes pour mettre à jour la base de données ?

A
  1. Modifier l’entité PHP (manuellement ou avec make:entity).
  2. Générer un fichier de migration : symfony console make:migration.
  3. Vérifier le fichier SQL généré dans /migrations.
  4. Appliquer la migration en base : symfony console doctrine:migrations:migrate.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Comment vérifie-t-on qu’un utilisateur n’a pas déjà créé un élément spécifique (par exemple, pour éviter les doublons) ? Décrivez la logique avec Doctrine.

A

La logique consiste à interroger le Repository de l’entité avant la création. On utilise findOneBy([‘champ’ => $valeur]).
Si la méthode renvoie un objet, le doublon est détecté et on renvoie une erreur.
On peut aussi utiliser la contrainte de validation #[UniqueEntity(‘champ’)] dans l’entité.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Comment injecter des données de tests proprement dans une base de donnée avec Symfony ?

A

On utilise le bundle DoctrineFixturesBundle. On crée une classe dans src/DataFixtures, on y instancie ses objets, on les “persiste” avec $manager->persist($objet) et on valide avec $manager->flush(). On lance enfin symfony console doctrine:fixtures:load.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Comment faire pour qu’un champ texte soit obligatoire et ait au moins 3 caractères dans un formulaire Symfony ?

A

On ajoute des attributs de validation (Assert) directement sur les propriétés de l’entité liée :

#[Assert\NotBlank]
#[Assert\Length(min: 3)]
private $monChamp;

Ou on utilise les constraintes dans le FormType.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Comment injecter un service dans un contrôlleur ?

A

On utilise l’injection de dépendances par constructeur. Symfony détecte automatiquement le type du service demandé et l’instancie pour nous (Autowiring).

public function \_\_construct(private MonService $monService) {}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Décrivez l’enchainement des couches du MVC de l’affichage à la base de donnée dans un projet Symfony.

A

Enchaînement des couches MVC :

  1. Requête : L’utilisateur tape une URL.
  2. Contrôleur : Reçoit la requête, traite les données (via Formulaires).
  3. Modèle (Doctrine) : Le contrôleur demande au Repository de récupérer ou modifier des données en base.
  4. Base de données : Renvoie les lignes SQL transformées en Objets (Entities).
  5. Vue (Twig) : Le contrôleur envoie les objets à Twig qui génère le HTML.
  6. Réponse : Le HTML est renvoyé au navigateur.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Décrivez, autant que possible, le mécanisme d’injection de dépendances dans Symfony.

A

Il repose sur le Service Container. Au démarrage, Symfony scanne toutes les classes. Quand vous demandez une interface ou une classe dans un constructeur, le Container cherche s’il possède une instance correspondante. S’il la trouve, il l’injecte. S’il ne l’a pas, il l’instancie (et instancie ses propres dépendances au passage). C’est ce qu’on appelle l’Autowiring.

17
Q

Qu’apporte Symfony par rapport à du code PHP sans framework ?

A

Symfony apporte une structure standardisée (on ne perd pas de temps à inventer l’architecture), une sécurité native (protection CSRF, XSS, SQLi), une immense bibliothèque de composants réutilisables et une maintenance facilitée pour les projets d’envergure grâce au respect des principes SOLID.