3 - Live Coding : Automatiser les slugs et les dates avec Symfony 5.1

Par Nouvelle-Techno.fr le 20 juin 2020 - Catégories : Symfony Live-Coding

Lire l'article sur le site d'origine

Avant d'aller plus loin dans les tutoriels, nous aurons besoin d'installer différents outils qui nous permettront :

Création des slugs

Lors de l'ajout d'une annonce, nous allons générer une version simplifiée de son titre qui sera utilisée dans les routes pour générer des urls qui seront plus compréhensibles. Il s'agit d'un "slug". Le slug ne contient ni majuscules, ni accents, ni espaces ni caractères spéciaux.

Il existe dans Symfony 5.1 une classe Strings qui permet de générer des slugs. Je la trouve incomplète, celle-ci ne gérant pas, par exemple, l'unicité des slugs.

Pour commencer nous allons installer les extensions Doctrine qui nous permettront d'effectuer cette tâche. Auparavant nous utilisions l'extension de Stof, mais celle-ci n'a pas été portée sur Symfony 5.1. Antishov a effectué le portage.

composer require antishov/doctrine-extensions-bundle

Une fois ces extensions installées, nous allons activer l'extension "Sluggable".

Celà se passe dans le fichier "config/packages/stof_doctrine_extensions.yaml", fichier à créer si il n'est pas présent

# Read the documentation: https://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html
# See the official DoctrineExtensions documentation for more details: https://github.com/Atlantic18/DoctrineExtensions/tree/master/doc/
stof_doctrine_extensions:
    default_locale: fr_FR
    orm:
        default:
            sluggable: true
Nous allons ensuite ajouter le "use" ci-dessous dans la ou les entités contenant des slugs
use Gedmo\Mapping\Annotation as Gedmo;

Enfin, dans ces mêmes entités, nous allons modifier l'annotation de la propriété "slug". Attention à bien mettre dans "fields" le ou les champs concernés par le slug.

/**
 * @Gedmo\Slug(fields={"titre"})
 * @ORM\Column(length=128, unique=true)
 */
private $slug;

Il est également nécessaire de supprimer le "setter" setSlug.

Automatisation des dates

Lors de l'ajout d'une annonce, nous allons générer automatiquement la date de création et la date de mise à jour.

Nous allons activer l'extension Doctrine "Timestampable".

Celà se passe dans le fichier "config/packages/stof_doctrine_extensions.yaml".

# Read the documentation: https://symfony.com/doc/current/bundles/StofDoctrineExtensionsBundle/index.html
# See the official DoctrineExtensions documentation for more details: https://github.com/Atlantic18/DoctrineExtensions/tree/master/doc/
stof_doctrine_extensions:
    default_locale: fr_FR
    orm:
        default:
            sluggable: true
            timestampable: true

Nous allons ensuite ajouter le "use" ci-dessous dans la ou les entités contenant des dates (facultatif si l'entité contient également un slug)

use Gedmo\Mapping\Annotation as Gedmo;

Enfin, dans ces mêmes entités, nous allons modifier l'annotation des propriétés de date

/**
 * @var \DateTime $created_at
 * 
 * @Gedmo\Timestampable(on="create")
 * @ORM\Column(type="datetime")
*/
private $created_at;

/**
 * @var \DateTime $updated_at
 *
 * @Gedmo\Timestampable(on="update")
 * @ORM\Column(type="datetime")
*/
private $updated_at;

Il est également nécessaire de supprimer les "setters" setCreatedAt et setUpdatedAt s'ils existent.

Obtenir de l'aide

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

#Tutoriel #PHP #Symfony #Live-Coding