Série : Symfony 7
Fichiers : https://github.com/NouvelleTechno/OpenBlog
Dans ce second tutoriel de notre série consacrée à Symfony 7, nous allons plonger dans la création de contrôleurs et la gestion des URL pour notre projet OpenBlog.
Mise en place de la configuration HTTPS
Avant de commencer, j'ai effectué quelques modifications hors ligne pour ajouter la prise en charge du HTTPS. Voici ce qui a été ajouté :
- Fichier Apache : le fichier
apache/default-ssl.conf
a été créé et contient la configuration nécessaire pour activer le port 443 et les certificats de sécurité.
<VirtualHost *:443>
DocumentRoot /var/www/public
<Directory /var/www/public>
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
</Directory>
SSLCertificateFile /etc/ssl/certs/mycert.crt
SSLCertificateKeyFile /etc/ssl/private/mycert.key
</VirtualHost>
- Dossier etc : Contient le certificat et la clé privée nécessaires pour HTTPS.
# Cette commande permet de créer les certificats
openssl req -x509 -new -out mycert.crt -keyout mycert.key -days 365 -newkey rsa:4096 -sha256 -nodes
- Dockerfile et docker-compose ont été modifiés pour inclure le port 443.
FROM php:8.2-apache
RUN apt-get update \
&& apt-get install -y zlib1g-dev g++ git libicu-dev zip libzip-dev zip \
&& docker-php-ext-install intl opcache pdo pdo_mysql \
&& pecl install apcu \
&& docker-php-ext-enable apcu \
&& docker-php-ext-configure zip \
&& docker-php-ext-install zip
RUN a2enmod rewrite
RUN a2enmod rewrite && a2enmod ssl && a2enmod socache_shmcb
WORKDIR /var/www
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN curl -sS https://get.symfony.com/cli/installer | bash
RUN mv /root/.symfony5/bin/symfony /usr/local/bin/symfony
RUN git config --global user.email "contact@nouvelle-techno.fr"
RUN git config --global user.name "Benoit Gambier"
version: '3.8'
services:
database:
container_name: database
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: openblog
MYSQL_USER: symfony
MYSQL_PASSWORD: symfony
ports:
- '4306:3306'
volumes:
- ./mysql:/var/lib/mysql
php:
container_name: php
build:
context: ./php
ports:
- 8080:80
- 8443:443
volumes:
- ./apache/default.conf:/etc/apache2/sites-enabled/000-default.conf
- ./apache/default-ssl.conf:/etc/apache2/sites-enabled/000-default-ssl.conf
- ./etc/ssl:/etc/ssl
- ./app:/var/www
depends_on:
- database
phpma:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
environment:
PMA_ARBITRARY: 1
PMA_HOST: database
PMA_USER: root
PMA_PASSWORD: secret
UPLOAD_LIMIT: 20M
ports:
- 8899:80
En lançant le serveur par docker-compose, vous pouvez maintenant accéder à votre projet via HTTPS sur le port 8443.
Création d'un contrôleur principal
Nous allons maintenant créer notre premier contrôleur. Les contrôleurs dans Symfony sont essentiels pour gérer le rendu des pages. Pour ce faire, nous allons créer un fichier nommé MainController.php dans le dossier src/Controller.
Voici le code initial pour notre contrôleur :
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class MainController extends AbstractController
{
#[Route('/main', name: 'app_main')]
public function index(): Response
{
return new Response('Hello');
}
}
Gestion des routes avec les attributs PHP8
Pour relier notre contrôleur à une URL, nous utilisons l'attribut `#[Route]` de Symfony. Cela permet de définir le chemin de la route ainsi que son nom. Dans cet exemple, la route /main renvoie une réponse simple contenant le texte "Hello".
Utilisation de Maker Bundle pour automatiser la création
Pour faciliter la création de contrôleurs, nous utilisons le MakerBundle de Symfony. En exécutant la commande suivante depuis notre terminal connecté au conteneur Docker
symfony console make:controller MainController
Symfony crée automatiquement le contrôleur avec une méthode index par défaut.
Affichage dynamique avec Twig
Pour rendre notre page plus dynamique, nous allons utiliser Twig, le moteur de templates de Symfony. Nous modifions notre méthode index pour retourner un template
#[Route('/', name: 'app_home')]
public function index(): Response
{
return $this->render('main/index.html.twig', [
'message' => 'Hello, Benoît!',
]);
}
Le fichier index.html.twig se trouve dans le dossier templates/main et contient
{% extends 'base.html.twig' %}
{% block title %}Hello{% endblock %}
{% block body %}
<h1>Hello {{ prenom }}</h1>
{% endblock %}
Conclusion
Nous avons vu comment créer des contrôleurs et gérer les URL dans Symfony 7, ainsi que l'utilisation de Twig pour le rendu des templates. Dans notre prochain tutoriel, nous aborderons l'injection de CSS et de JavaScript pour améliorer l'apparence et les fonctionnalités de nos pages.
Obtenir de l'aide
Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat.
Catégories : Symfony Symfony 7
Mots-clés : Symfony controleurs Symfony 7