5 - Les contrôleurs avec Symfony 4

Auteur

user Benoit

Date :

Partager

Partager sur Facebook Partager sur Twitter Partager sur LinkedIn

Maintenant que nos entités sont créées, ainsi que l'authentification des utilisateurs, nous allons pouvoir commencer à créer nos pages.

Le modèle MVC sépare les 3 concepts que sont la base de données (modèles), la page html (Vue) et tout le traitement (Contrôleur).

Nous allons nous pencher sur la partie traitement qui va faire l'interface entre nos données et les vues.

Nous allons également parler des routes, qui serviront à former nos URLs.

Pour le 1er exemple, nous allons créer un contrôleur qui traitera toutes les pages "statiques" de notre site, comme la page d'accueil, les pages de mentions légales... En effet, un contrôleur peut gérer une multitude de "pages" qui correspondent à des routes. Pour l'exemple, le site Nouvelle-Techno.fr a une page d'accueil accessible par https://nouvelle-techno.fr et les mentions légales sont accessibles par https://nouvelle-techno.fr/mentions-legales

Les routes correspondantes sont "/" représentant la page d'accueil et "/mentions-legales"

Créer le contrôleur

Pour créer un contrôleur, nous utiliserons la commande suivante

php bin/console make:controller

La question nous est posée concernant le nom du contrôleur, nous allons l'appeler "MainController"

Cette commande crée plusieurs choses :

  • Un fichier MainController.php dans src/Controller
  • Un dossier main dans templates
  • Un fichier index.html.twig dans templates/main

Nous allons, pour le moment, regarder le fichier MainController.php

Celui-ci contient le code ci-dessous

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class MainController extends AbstractController
{
    /**
     * @Route("/main", name="main")
     */
    public function index()
    {
        return $this->render('main/index.html.twig', [
            'controller_name' => 'MainController',
        ]);
    }
}

Une classe "MainController" a été créée. Celle-ci contient une seule méthode qui s'appelle "index".

J'attire votre attention sur le commentaire qui se trouve au dessus de la méthode

/**
 * @Route("/main", name="main")
 */

Il s'agit d'une annotation qui permet de déclarer la route par laquelle nous pourrons accéder à cette méthode. Ici, nous accéderons par la route "/main".

Si notre site s'appelle "monblog.fr", la méthode sera accessible par "monblog.fr/main".

Cette route porte également un nom, qui est actuellement "main".

Nous pourrons donc faire référence à cette route sous le nom "main" à plusieurs endroits dans nos différents fichiers.

Concernant la méthode index, elle contient, pour le moment, une seul et unique instruction qui est un return que nous développerons un peu plus loin.

Structure d'un contrôleur

Le contrôleur est une classe qui contiendra différentes méthodes. Chaque méthode correspondra à une route particulière et retournera une vue ou des données, entre autres.

Ainsi, nous pourrions imaginer modifier notre contrôleur afin qu'il gère les routes de la page d'accueil et des mentions légales. Ces pages étant statiques, nous n'aurons qu'à générer la vue.

Le code serait le suivant

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class MainController extends AbstractController
{
    /**
     * @Route("/", name="accueil")
     */
    public function index()
    {
        // Nous générons la vue de la page d'accueil
        return $this->render('main/index.html.twig');
    }

    /**
     * @Route("/mentions-legales", name="mentions-legales")
     */
    public function mentionsLegales()
    {
        // Nous générons la vue de la page des mentions légales
        return $this->render('main/mentions-legales.html.twig');
    }
}

Vous pouvez constater que nous avons maintenant 2 méthodes, l'une pour la page d'accueil (route "/" et nom "accueil") et l'autre pour la page des mentions légales (route "/mentions-legales" et nom "mentions-legales")

Ces deux méthodes contiennent une seule inscruction return qui utilise une méthode "render" pour générer une vue. Ce point sera traité dans le prochain article.

Nous traiterons également dans un prochain article le dialogue entre le contrôleur, la base de données et la vue.

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat

Catégories : MVC PHP Tutoriel Symfony

Mots-clés : Tutoriel Controllers Framework MVC PHP Routes Symfony controleurs