Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

Créer votre plugin* pour le Framework Sylius

Par Mathieu DELMARRE Publié le 21/03/2020 à 10:29:44 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Les plugins Sylius sont un moyen puissant pour étendre des fonctionnalités sur le Framework Sylius dédié au e-commerce. A l’aide des plugins les cycles de développement sont plus efficaces et cloisonnés par utilité. Ils permettent également un partage du travail dans la communauté de développeur open-source.

Dans ce tutoriel vous verrez comment créer votre premier plugin pour Sylius. Préparer sa configuration et lancer votre boutique de test prête à recevoir votre nouvelle fonctionnalité.

Le tutoriel est réalisé à la version 1.6.4 du "sylius/plugin-skeleton"

A quoi sert un plugin ou bundle sur Symfony ?

L’utilité d’un plugin c’est d’en-capsuler une partie logique du code afin de la répliquer dans de multiple projet. Un plugin se veut spécifique à une fonctionnalité. Étant dans un environnement open-source inspirez-vous des plugins déjà présents pour enrichir vos connaissances.

Syius est une sûr-couche de Symfony ajoutant des fonctionnalités e-commerce à l'aide de plusieurs bundles.

Commencer le développement d’un plugin Sylius

La première étape c’est de télécharger le squelette du plugin Sylius :

$ composer create-project sylius/plugin-skeleton SupinfoSyliusExamplePlugin

Table 1. Voici l'arborescence du projet après son téléchargement :

Si vous ne possédez pas composer vous pourrez l’installer à cette adresse : https://getcomposer.org/download/

.

Pour rappel il est important de commencer le nom de votre plugin par votre nom de « vendor » suivi de Sylius en préfixe et Plugin en suffixe.

.

Ici le nom du vendor est "Supinfo" et le nom du plugin est "Example" .

.

Supinfo/SyliusExamplePlugin


Suppression des fonctionnalités d'exemples

Le squelette contient quelques fonctionnalités à titre d'exemple.

Nous allons tout d'abord les supprimer :

  1. Supprimer tous les fichiers contenus dans le dossier /features

  2. Supprimer le dossier Controller dans /src/Controller

  3. Supprimer les vues contenues dans /src/Resources/views

  4. Supprimer le contenu des fichiers :

    1. /src/Resources/config/admin_routing.yml

    2. /src/Resources/config/shop_routing.yml

  5. Supprimer le fichier /src/Resources/config/services.xml : nous le transformerons par la suite en services.yml

  6. Créer le fichier /src/Resources/services.yml (vide)

  7. Supprimer le dossier /src/Resources/public

Changement des noms dans le plugin squelette

Le squelette contient un nom par défaut "Acme/SyliusExamplePlugin".

Nous allons devoir changer celui ci dans différents fichiers listés si dessous :

  1. Modifier composer.json :

    1. name: "sylius/plugin-skeleton" → name: "supinfo/sylius-order-email-admin"

    2. description: "Acme example plugin for Sylius." → description: "Supinfo example plugin for Sylius"

    3. Acme//SyliusExamplePlugin// → Supinfo//SyliusExamplePlugin//

    4. Tests//Acme//SyliusExamplePlugin// → Tests//Supinfo//SyliusExamplePlugin//

  2. Renommer -> /src/AcmeSyliusExamplePlugin.php

    AcmeSyliusExamplePlugin.php → SupinfoSyliusExamplePlugin.php

  3. Modifier le fichier précédent → /src/SupinfoSyliusExamplePlugin.php :

    1. Changement du namespace :

      namespace Acme/SyliusExamplePlugin; → namespace Supinfo/SyliusExamplePlugin;

    2. Changement du nom de la classe :

      class AcmeSyliusExamplePlugin → class SupinfoSyliusExamplePlugin

  4. Modifier → /src/DependencyInjection/Configuration.php

    1. Changement du namespace :

      Acme/SyliusExamplePlugin/DependencyInjection; → Supinfo/SyliusExamplePlugin/DependencyInjection;

    2. Changer à deux reprises :

      "acme_sylius_example_plugin" → "supinfo_sylius_example_plugin"

  5. Renommer → /src/DependencyInjection/AcmeSyliusExampleExtension.php

    AcmeSyliusExampleExtension.php → SupinfoSyliusExampleExtension.php

  6. Modifier -> /src/DependencyInjection/SupinfoSyliusExampleExtension.php

    Votre fichier final doit ressembler à ceci : (Actions réalisés : Changement du type de fichier pour le service .yml + les importations, changement du namespace et du nom de la classe.)

    <?php
    
    declare(strict_types=1);
    
    namespace Supinfo/SyliusExamplePlugin/DependencyInjection;
    
    use Symfony/Component/Config/FileLocator;
    use Symfony/Component/DependencyInjection/ContainerBuilder;
    use Symfony/Component/DependencyInjection/Extension/Extension;
    use Symfony/Component/DependencyInjection/Loader;
    
    final class SupinfoSyliusExampleExtension extends Extension
    {
        /**
         * {@inheritdoc}
         */
        public function load(array $config, ContainerBuilder $container): void
        {
            $config = $this->processConfiguration($this->getConfiguration([], $container), $config);
    		$loader = new Loader/YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
            $loader->load('services.yml');
        }
    }
  7. Modifier → /tests/Application/Kernel.php :

    namespace Tests/Acme/SyliusExamplePlugin/Application; → namespace Tests/Supinfo/SyliusExamplePlugin/Application;

  8. Modifier → /tests/Application/bin/console :

    use Tests/Acme/SyliusExamplePlugin/Application/Kernel; → use Tests/Supinfo/SyliusExamplePlugin/Application/Kernel;

  9. Modifier → /tests/Application/config/bundles.php

    Acme/SyliusExamplePlugin/AcmeSyliusExamplePlugin → Supinfo/SyliusExamplePlugin/SupinfoSyliusExamplePlugin

  10. Modifier → /tests/Application/public/index.php

    use Tests/Acme/SyliusExamplePlugin/Application/Kernel; → use Tests/Supinfo/SyliusExamplePlugin/Application/Kernel;

  11. Supprimer le contenu → /tests/Application/config/routes.yaml

Installer votre serveur de test

Tout d'abord mettre à jour le cache de votre composer :

$ composer install

Ensuite placer vous dans le dossier contenant l'application de test :

$ cd tests/Application

Réaliser la suite de commande suivante :

$ yarn install
$ yarn build
$ php bin/console assets:install public -e test

Si une erreur survient pendant la construction lors de "yarn build". (Les ressources peuvent être introuvables) Pour corriger, supprimer votre dossier "/node_modules" à la racine du projet. Puis copié " /tests/Application/node_modules" → "/node_modules". Puis relancé "yarn build". L'erreur est survenue sur un Windows 10.

.

Paramétrage de la base de données :

Le fichier ce trouvant "/tests/Application/.env" contient les paramètres de l'application en fonction de l'environnement qui est défini par le paramétre "-e test" sur chaque commande. Ici nous sommes déjà dans une application de test.

.

Le nom de votre base de données est définit dans "/test/Application/.env" :

DATABASE_URL=mysql://root@127.0.0.1/acme_sylius_example_plugin_%kernel.environment%?serverVersion=5.5
#Changer selon vos paramétres de connexion :
DATABASE_URL=mysql://root@127.0.0.1/supinfo_sylius_example_plugin_%kernel.environment%?serverVersion=5.5

Pour créer la base de données vous pouvez le faire via les commandes suivantes :

$ cd tests/Application
$ php bin/console doctrine:database:create -e test
>Created database `supinfo_sylius_example_plugin_test` for connection named default

$ php bin/console doctrine:migration:diff -e test
$ php bin/console sylius:install -e test
#Le plus simple est de mettre "yes" pour la configuration de la base de données
> [OK] Sylius has been successfully installed.     

Voici le résultat de ma console :

$ php bin/console sylius:install -e test
Installing Sylius...
Step 1 of 4. Checking system requirements.
Step 2 of 4. Setting up the database.
-------------------------------------

Creating Sylius database for environment test.
It appears that your database already exists.
Warning! This action will erase your database.
Would you like to reset it? (y/N) y
 4/4 [░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 100%

Loading sample data for environment test from suite default.
Warning! This action will erase your database.
Continue? (y/N) y
 1/1 [░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 100%

Step 3 of 4. Shop configuration.
--------------------------------
Currency (press enter to use USD):
Adding dollar des États-Unis currency.
Language (press enter to use en_US):
Adding anglais Language.
Adding en_US locale.
Create your administrator account.
E-mail: admin@admin
 This value is not a valid email address. 
E-mail: admin@admin.com
Username (press enter to use email): admin
Choose password:
Confirm password:
Administrator account successfully registered.

Step 4 of 4. Installing assets.
-------------------------------
Installing Sylius assets for environment test.
 1/1 [░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 100%                                                                          
 [OK] Sylius has been successfully installed.     
You can now open your store at the following path under the website root: /
$ php bin/console server:run                                                                                                              
>[OK] Server listening on http://127.0.0.1:8000                                                                              
 // Quit the server with CONTROL-C.

Connexion à votre environnement de test

Voici le rendu du site lorsque vous y accédez sur http://127.0.0.1:8000 après avoir réalisés les actions précédentes. L'utilisation des "fixtures" permettent d'incorporer directement des produits dans votre boutique de test. Ce sont des données idéales pour développer nos prochaines fonctionnalités.

.

Voici le rendu de votre boutique :

.

Connexion à la zone admin : 127.0.0.1/admin/ :

Utilisez vos identifiants de connexion configurés à l'installation de Sylius.

ANNEXES :

LEXIQUE

  • plugin : C'est un ensemble de fonctionnalité aussi nommé module d'extension.

  • vendor : Dossier contenant les bundles ou plugins dans de votre projet. Besoin de composer pour installer les librairies définit dans votre composer.json.

SOURCES :

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels