Menez Magento à la baguette !

⏲️ ~5 min de lecture

Publié le par Hadrien
composer Magento php

Composer et Magento

Magento, vous connaissez ? Cette plateforme e-commerce qui fait très bien son job, mais qui consiste en un gros bloc de 1 346 126 lignes de code dans votre dépôt Git sans aucune valeur métier propre à votre projet.

Et Composer, vous connaissez Composer ? Ce gestionnaire de dépendances PHP vous permet de définir les librairies et modules dont dépend votre projet. En plus de vous faciliter la vie, vous enlevez de votre dépôt du code superflu.

Alors pourquoi ne pas mélanger tout ça afin de pouvoir créer un projet Magento où Magento ne serait qu'une dépendance de notre application ?

Votre premier projet "composerisé" #

Entrons maintenant dans le vif du sujet et créons un premier projet Magento basé sur Composer.

Première étape, préparer le répertoire de notre projet :

$ mkdir magento-composer && cd magento-composer
$ git init && git commit --allow-empty -m "Initial commit"

Initialiser composer #

$ composer -n init
$ echo "/vendor/" > .gitignore

L'option -n de composer permet d'initialiser composer en mode non interactif. Sans ce flag, composer vous pose tout un tas de questions permettant la création d'un nouveau paquet, or nous ne voulons pas créer un paquet mais simplement définir les dépendances de notre projet.

Votre fichier composer.json devrait alors ressembler à ça :

{
    "require": {}
}

Composer n'utilisant de base que Packagist comme source de paquets, la prochaine étape est de rajouter Firegento (voir partie merci qui pour plus d'infos) comme source supplémentaire. Éditez votre composer.json afin qu'il ressemble à ça :

{
  "repositories": [
        {
            "type": "composer",
            "url": "http://packages.firegento.com"
        }
    ],
    "require": {},
    "extra":{
        "magento-root-dir": "htdocs/"
    }
}

L'option magento-root-dir vous permet de définir le répertoire dans lequel sera installé Magento ainsi que les modules installés via Composer. Magento ne disposant de dossier "public" comme peuvent en avoir CakePHP (app/webroot) ou Symfony (www), il est recommandé de le mettre dans un sous-répertoire afin que votre serveur web (Apache, nginx) ait un répertoire racine ne comprenant pas de fichiers superflus tels que votre composer.json, le répertoire vendor de Composer, etc.

Installation de Magento #

Maintenant, faisons ce pourquoi nous sommes là : installer Magento via Composer. Pour faire ça il suffit simplement de définir le paquet magento/core comme dépendance dans Composer :

$ composer require -n magento/core 1.9.*
$ echo "/htdocs/" >> .gitignore

Ici nous installons un Magento version 1.9.x (1.9.0.1 au moment d'écrire ces lignes).

De plus, si nous étions en mode interactif, Composer vous demanderait la confirmation de la création du répertoire htdocs. En mode non interactif, il le fait automatiquement.

Enfin nous en profitons pour ajouter le dossier htdocs au .gitignore puisqu'il ne s'agit que d'un "réceptacle" pour nos dépendances. Il n'est donc pas nécessaire de le versionner.

Enfin, en bons utilisateurs de Git, commitons :

$ git add . && git commit -m "Added magento core as dependency"

Que remarquons nous alors ? Eh bien que nous venons ni plus ni moins d'installer la dernière version de Magento et que notre dépôt n'est pour autant composé que de 3 fichiers !

Vous pouvez vérifier que tout c'est bien passé en lançant le serveur intégré de PHP

$ php -S localhost:9000 -t htdocs

Si vous ouvrez votre navigateur à l'adresse http://localhost:9000/ vous devriez tomber sur la page d'installation de Magento.

Installer un module Magento #

Maintenant que nous avons un Magento fonctionnel, nous allons pouvoir installer notre premier module. À titre d'exemple, installons l'extension Fooman Speedster.

Comme pour Magento, le processus est extrêmement facilité par Composer :

$ composer require 'fooman/speedster=*'
$ ls -l htdocs/app/code/community
total 0
drwxr-xr-x  3 chadrien  staff  102 Aug 21 11:20 Cm
drwxr-xr-x  4 chadrien  staff  136 Aug 21 11:45 Fooman
drwxr-xr-x  3 chadrien  staff  102 Aug 21 11:20 Phoenix
$ ls htdocs/app/etc/modules/Fooman_*
htdocs/app/etc/modules/Fooman_Common.xml    htdocs/app/etc/modules/Fooman_Speedster.xml
$ git commit -a -m "Added Fooman Speedster as dependency"

On peut constater que l'installation s'est bien passée et qu'un dossier Fooman est bien apparu dans le code pool community de notre installation Magento, et les fichiers XML du modules ont été correctement installés.

Merci qui ? #

Merci Magento Hackathon ! Tout ceci est possible grâce au projet Magento Composer installer, initié lors d'un hackathon Magento (jusque là, ça se tient).

Le but de ce paquet est d'ajouter des méthodes d'installations de paquets (ça commence à faire un paquet de paquets) pour Composer afin de pouvoir installer le cœur de Magento ainsi que des modules par le biais de Composer.

Pour aller de pair avec l'installateur, l'équipe du Magento Hackathon a également mis en place un dépôt Satis (sorte de version allégée de Packagist) contenant une floppée de modules Magento compatibles avec cet installateur. Le cœur de Magento, une grande partie des modules présents sur Magento Connect, ainsi que plusieurs modules de la communauté sont ainsi mis à notre disposition. Vous pouvez consulter et rechercher parmi la liste des paquets disponibles à l'adresse suivante : http://packages.firegento.com/

En conclusion #

Vous avez désormais la possibilité de gérer vos projets Magento beaucoup plus proprement au moyen de trois fichiers uniquement, et ça c'est quand même la classe.
Vous gagnez en lisibilité (dépôt Git plus clair) et en facilité de maintenance (composer update pour faire des mise à jour) en utilisant simplement les derniers technologies disponibles et surtout grâce à l'effort de la communauté Magento.

Deux points restent cependant en suspend : comment installer un module qui n'est pas disponible dans les paquets de Firegento, et surtout comment intégrer votre propre code à cette installation de Magento par composer ?
Réponse dans un prochain billet !

Cet article vous a plu ? Sachez que nous recrutons !

← Accueil