3- Automatiser les slugs et les dates avec Symfony 5.1

Temps de lecture : 10 minutes environ.

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




  • De générer automatiquement les "slugs"

  • De générer automatiquement les dates



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

3- Automatiser les slugs et les dates avec Symfony 5.1
Article publié le - Modifié le

Catégories : Symfony Live-Coding symfony5

Mots-clés : Tutoriel PHP Symfony Live-Coding symfony5 dates slugs automatiser

Partager : Partager sur Facebook Partager sur Twitter Partager sur LinkedIn