Académique Documents
Professionnel Documents
Culture Documents
Symfony4
FAYCEL EL AYEB
Installation
Symfony utilise Composer pour la gestion des dépendances, assurez vous donc
d’avoir Composer installer sur votre machine, il faut aussi vous assurez que la
commande composer est disponible en l’ajoutant au PATH.
Maintenant installons symfony, placez vous dans le répertoire dans le quel vous
voulez créer votre projet et entrez cette ligne de commande:
Nous créons ici un projet qui s’appelle blog. Si vous faites donc un ls (dir)
vous devez voir un nouveau dossier blog, rendez dans ce dossier et
installer un serveur de développement:
$ cd blog
$ composer req server
Vous pouvez ensuite lancer le serveur de développement soit avec
server:start ou server:run comme ceci:
$ php bin/console server:start
Ou
$ php bin/console server:run
La console nous signifie que notre site web est accessible à l’adresse
http://127.0.0.1:8000, ouvrez donc ce lien dans votre navigateur, et on
arrive sur cette page:
Installation
Configuration de l’environnement
L’une des grandes nouveautés de la version 4 de Symfony est le fichier .env qui se trouve à
la racine, ce fichier contient les configurations de notre application comme les
informations sur la base de données, l'environnement dans le quel on travail (dev ou
prod). Ouvrons le donc.
Si vous lisez un peu le fichier, vous allez tout de suite comprendre à quoi sert ce fichier.
Nous avons l'environnement dans le quel on travail APP_ENV=dev on est donc en mode
développement, cela va nous permettre par exemple d'avoir les erreurs afficher en clair,
en bas nous avons la connexion à notre base de données DATABASE_URL dont nous allons
voir un plus loin.
Les routes de notre application
Nous allons maintenant définir les routes de notre application. Nous allons pour cela utiliser
le fichier config/routes.yaml. Il faut savoir qu’il y a d’autres méthodes qui existent comme
les annotations ou encore dans un fichier xml.
Avant de définir les routes dans le ficher routes.yaml, énumérons d’abord les routes dont
on pense notre application a besoin.
L’accueil: c’est la rentrée de notre application et nous allons en profiter pour afficher la liste de
nos articles
L’ajout d’un article
La lecture d’un article: cette page va nous permettre d’afficher un article quand on clique dessus
La modification d’un article
La suppression d’un article
Nous allons pour le moment créer ces routes, que l’on complétera au fur et à mesure.
Ajoutez donc ce code au fichier routes.yaml
Les routes de notre application
homepage:
path: /
controller: App\Controller\BlogController::index
article_add:
path: /add
controller: App\Controller\BlogController::add
article_show:
path: /show/{url}
controller: App\Controller\BlogController::show
article_edit:
path: /edit/{id}
controller: App\Controller\BlogController::edit
requirements:
id: '\d+'
article_remove:
path: /remove/{id}
controller: App\Controller\BlogController::remove
requirements:
id: '\d+'
Les routes de notre application
Il n'y a pas trop de complications sur les 2 premières routes, l'accueil et l'ajout, ensuite nous
avons la route pour afficher l'article article_show qui reçoit un paramètre qui est celui de
L’URL de l'article, puis nous avons les routes article_edit et article_remove qui elles
prennent plutôt l'id de l'article, et dans la section requirements on spécifie bien que l'id ne
peut être qu'un entier id: '\d+'.
Alors pourquoi le choix d'utiliser l'id au lieu de L’URL sur la modification et la suppression,
c'est parce que nous n'avons pas besoin de référencer ces deux pages, donc L’URL n'est
pas publique contrairement à la page de vue.
LE contrôleur est juste une méthode qui va nous permettre de retourner une réponse. En
gros le contrôleur reçois une requête Request et renvoie une réponse Response.
Pour créer le contrôleur, nous allons utiliser la ligne de commande, la fameuse ligne de
commande de Symfony.
Nous créons le contrôleur BlogController, dans la console nous voyons bien les fichiers qui
ont été créés, allons donc ouvrir le fichier BlogController.php, pour le moment tenez pas
compte de l’autre fichier, nous allons y revenir
Les contrôleurs
// src/Controller/BlogController.php
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
class BlogController extends AbstractController
{
/**
* @Route("/blog", name="blog")
*/
public function index(){
return $this->render('blog/index.html.twig', [
'controller_name' => 'BlogController',
]);
}
}
Les contrôleurs
La classe BlogController contient une méthode index() qui contient une docstring, cette
docstring définie la route pour ce contrôleur.
Revenons donc au docstring de la méthode index(), en fait c’est ce qu’on appelle une
annotation, et cette annotation définit une route qui pointe vers le contrôleur index, c’est
donc une duplication vu que nous on a déjà défini nos routes dans le fichier routes.yaml,
nous allons donc effacer l’annotation ainsi que le use de la classe Annotations, puis on
retourne une réponse avec la classe Response. Voici donc notre contrôleur:
Les contrôleurs
// src/Controller/BlogController.php
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class BlogController extends AbstractController
{
public function index()
{
return new Response('<h1>Page d\'accueil</h1>');
}
}
Résultat
Voilà, si vous naviguez maintenant sur http://127.0.0.1:8000 vous devez avoir ça:
Les contrôleurs (suite)
Prochaine étape, nous allons définir les contrôleurs des routes que
nous avons défini dans le fichier routes.yaml. Nous avons donc 4
contrôleurs de plus a ajouter. Chaque contrôleur doit retourner un
objet Reponse pour le moment avec le nom de la page par
exemple, ça ne devrait pas être compliqué et je compte sur vous
pour essayer de le faire.
Voila, j’espère que vous avez réussi à le faire, corrigeons donc cela
ensemble, voici à quoi ressemble mon BlogController.php :
Les contrôleurs (suite)
// src/Controller/BlogController.php
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
cass BlogController extends AbstractController
{
public function index()
{ return new Response('<h1>Page d\'accueil</h1>');}
public function add()
{ return new Response('<h1>Ajouter un article</h1>'); }
public function show($url)
{ return new Response('<h1>Lire l\'article ' .$url. '</h1>'); }
public function edit($id)
{ return new Response('<h1>Modifier l\'article ' .$id. '</h1>');}
public function remove($id)
{ return new Response('<h1>Supprimer l\'article ' .$id. '</h1>');}
}
Les contrôleurs (suite)
Ici aussi pareil, si vous essayer d’accéder à la route edit sans l'id de l'article à
supprimer http://127.0.0.1:8000/edit ou que vous envoyez une chaîne de
caractères au lieu d'entier http://127.0.0.1:8000/edit/article, vous aurez une erreur
404
Supprimer un article:
http://127.0.0.1:8000/remove/4
Maintenant que nous avons nos routes et nos contrôleurs, dans la
prochaine partie, nous allons créer nos différentes vues et les
retourner au lieu de retourner de simple titre h1.