Tutorials

Crédit photo : pxfuel.com

Contexte

eZ Publish a évolué vers eZ Platform et après qu'eZ Systems Corporation ait changé de nom en Ibexa, eZ Platform a été renommé Ibexa Content.

Ibexa Content est un système de gestion de contenu hiérarchique (Hierarchical Content Management System - HCMS), utile pour gérer de grands sites Web avec de nombreux types de contenu différents.

Sur eZ Publish ou eZ Platform 2.5, vous pouvez utiliser le bundle Kaliop pour gérer le schéma et le contenu de la base de données entre chaque environnement de serveur. Ce bundle permet de créer, mettre à jour ou supprimer toute la structure et le contenu d'eZ Platform. Une migration est un simple fichier SQL ou un fichier YAML contenant les instructions pour migrer la base de données.

Pour Ibexa Content, le bundle d'origine Kaliop eZ Migration ne fonctionne pas. Ibexa a publié une version compatible avec deux subtilités.

Prérequis

Ce guide concerne uniquement eZ Platform 3.x et Ibexa Content 3.x. Vous devez avoir un projet fonctionnel sur votre ordinateur avant de continuer.

Le gestionnaire de dépendances Composer doit être installé. Ce guide suppose que vous avez le chemin d'installation de Composer dans la variable d'environnement du système d'exploitation PATH.

Installation

Pour installer le bundle, ouvrez une fenêtre de terminal et accédez au dossier racine de votre projet.

Maintenant, exécuter cette commande : composer require ezsystems/ezmigrationbundle

 

Créer un bundle de migration pour votre plate-forme

Le Bundle eZ Migration permet d'effectuer la migration uniquement avec un Bundle. C'est un ancien comportement hérité de d'ancienne version de Symfony.

Pour résoudre ce problème, créez un répertoire "SiteMigrationBundle" dans le répertoire "src" de votre projet.

Ajoutez le fichier "SiteMigrationBundle.php" dans le répertoire créé à l'étape précédente avec ce contenu :

//src/SiteMigrationBundle/SiteMigrationBundle.php

<?php
declare(strict_types=1);

namespace App\SiteMigrationBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

final class SiteMigrationBundle extends Bundle
{

}

Enregistrer le bundle dans le fichierconfig/bundles.php

//config/bundles.php

//...

App\SiteMigrationBundle\SiteMigrationBundle::class => ['all' => true],

//...

Maintenant, vous pouvez executer les commandes Kaliop.

Résoudre un petit problème

Si vous essayer la commande bin/console kaliop:migration:generate SiteMigrationBundle , vous obtenez cette erreur :

//

In Container.php line 266:

  The "ez_migration_bundle.helper.config.resolver" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.                                                

kaliop:migration:generate [--format FORMAT] [--type TYPE] [--mode MODE] [--match-type MATCH-TYPE] [--match-value MATCH-VALUE] [--match-except] [-l|--lang LANG] [--dbserver DBSERVER] [-a|--admin-login ADMIN-LOGIN] [--list-types] [--siteaccess [SITEACCESS]] [--] [<bundle> [<name>]]
 

Pour le résoudre en attendant que le correctif soit disponible, ajouter cette configuration de service dans le fichier "config/services.yaml" :

//config/services.yaml

    ez_migration_bundle.helper.config.resolver:
        public: true
        class: '%ez_migration_bundle.helper.config.resolver%'
        arguments:
            - '@ezpublish.config.resolver'
            - '@service_container'

Super !

Vous pouvez désormais utiliser ce bundle lorsque vous utilisez le bundle de migration Kaliop sur votre projet Ibexa Content.

Par exemple, cette commande génère une migration YAML pour ajouter le rôle Administrateur :

//

$ bin/console kaliop:migration:generate --type=role --mode=create --match-type=identifier --match-value=Administrator SiteMigrationBundle

Generated new migration file: /var/www/ibexa_website/src/SiteMigrationBundle/MigrationVersions/20210618122305_placeholder.yml

Toutes vos migrations générées seront stockées dans "src/SiteMigrationBundle/MigrationVersions/ "