Tout savoir sur WordPress

Utiliser composer sur un projet WordPress

Il arrive fréquemment que nous ayons besoin d’une librairie externe pour effectuer un développement. La réaction habituelle est de télécharger cette librairie et de l’inclure à la main dans notre projet. Or, il existe un gestionnaire de paquet en PHP qui se nomme Composer sortie en 2012. Découvrons comment s’en servir !

Pourquoi utiliser composer ?

Avant de voir comment utiliser ce gestionnaire de paquet en PHP, pourquoi est-il intéressant de l’avoir dans nos projets ?

Lorsque vous devez utiliser une librairie externe, il arrive fréquemment de voir les gens télécharger tout le dossier de la librairie et inclure le fichier nécessaire à l’activation de celle-ci. Or, comment faites-vous pour vous souvenir de la version que vous utilisez ? Sur un post-it ? En lisant le code ? Vous avez 150 dépendances et votre projet fait 15 Go ?

L’avantage d’utiliser composer est

  • D’alléger votre projet. C’est en installant le projet que l’on importe les dépendances ! (par exemple, on ne git pas les vendor)
  • Gérer le versionning de vos dépendances
  • Avoir une vision rapide des dépendances que l’on utilise

installation de composer

Pour pouvoir utiliser composer, il faut d’abord télécharger le fichier exécutable, le fameux composer.phar. Ce fichier que l’on retrouve régulièrement dans les projets PHP – autre que WordPress – nous permet d’exécuter les différentes commandes dont nous allons avoir besoin.

Deux manières de le télécharger :

Via curl :

[pastacode lang=”bash” manual=”%24%20curl%20-sS%20https%3A%2F%2Fgetcomposer.org%2Finstaller%20%7C%20php” message=”Curl installation” highlight=”” provider=”manual”/]

Via PHP :

[pastacode lang=”bash” manual=”%24%20php%20-r%20%22readfile(‘https%3A%2F%2Fgetcomposer.org%2Finstaller’)%3B%22%20%7C%20php” message=”Php installation” highlight=”” provider=”manual”/]

Une fois cette commande exécutée, vous allez vous retrouverez avec le fichier composer.phar. Ce fichier est généralement placé à la racine du projet sur lequel on travaille.

Typiquement, pour un WordPress :

  • Vous travaillez sur un plugin : on va le placer à la racine du plugin
  • Vous travaillez sur un thème : on va le placer à la racine du thème
  • Vous souhaitez que composer soit plus général à votre WordPress et puisse faire les deux : placez le à la racine du WordPress

Le fichier composer.phar vous permet d’utiliser composer sur n’importe quel environnement PHP : développement, production, … En revanche, pour une installation locale, il peut être plus intéressant de l’utiliser comme une commande “globale”. Cela vous évite de le re-télécharger à chaque utilisation. Pour avoir accès à composer en global, il vous faut exécuter cette commande à la suite de son installation (ceci ne fonctionne pas sous un environnement Windows) :

[pastacode lang=”bash” manual=”%24%20mv%20composer.phar%20%2Fusr%2Flocal%2Fbin%2Fcomposer” message=”Mv composer” highlight=”” provider=”manual”/]

Un Cas concret d’utilisation : La Librairie Guzzle

A partir de maintenant, toutes les commandes qui vont suivre seront exécutées dans le cas d’une installation globale de composer. Sinon il vous faudra faire : php composer.phar  ma_commande

Initialisation du projet composer

Rentrons dans le vif du sujet, nous allons voir comment utiliser la librairie Guzzle. Pour ceux qui ne la connaissent pas, c’est un client HTTP en PHP qui va abstraire toutes les complexités d’un process HTTP. On peut le voir comme une façade (design pattern bonjour) de CURL.Par “chance”, la librairie est bien documentée donc je ne vais faire que répéter le processus d’installation.

Partons d’un thème quelconque. Que ce soit un thème déjà terminé (ou pas), ça ne change rien. Vous pouvez avoir 36 archives, ça ne change rien :)

Dans votre terminal préféré, unne fois que vous êtes dans votre thème respectif, il vous suffit d’exécuter :

[pastacode lang=”bash” manual=”composer%20init” message=”Composer init” highlight=”” provider=”manual”/]

Il va ensuite s’en suivre une série de questions. Pour ma part j’ai tout laissé par défaut pour démarrer sauf lors du choix d’une dépendance où je savais que j’avais besoin de guzzle (puisque l’on va l’utiliser). Toutes les questions me semblent assez claires (titre, description, stabilité minimum du projet, type de projet, … ). En soit, rien de bien dramatique pour un projet qui n’a pas vocation à être distribué.

comoser_init

Une fois la génération de votre fichier composer, il vous suffit… d’installer les dépendances :

[pastacode lang=”bash” manual=”composer%20install” message=”Composer install” highlight=”” provider=”manual”/]

Quand tout est au vert, vous allez avoir un dossier vendor qui a été généré. C’est l’équivalent des node_modules pour ceux qui pratiquent npm. Composer étant le package manager de PHP.

On y est presque… maintenant, comment utiliser tous ces vendor ? Il suffit pour cela d’inclure un et un seul fichier! (pour tout ce que vous ferez, car oui… composer peut aussi vous servir à autre chose qu’à installer des dépendances. Autoloading PSR-4 par exemple :) ) :

[pastacode lang=”php” manual=”%3C%3Fphp%0A%0Arequire%20’vendor%2Fautoload.php’%3B” message=”Require autoload” highlight=”” provider=”manual”/]

  • Lorsque vous êtes sur un thème, mettre cette ligne tout en haut de votre fichier functions.php
  • Lorsque vous êtes sur un plugin, mettre cette ligne juste après les entêtes de votre plugin

Vous pouvez désormais utiliser tout ce qui concerne la librairie !

Avant d’aller plus loin et de voir quelques exemples de codes, sachez que pour ajouter un autre package, il n’y qu’une commande à exécuter :

[pastacode lang=”bash” manual=”composer%20require%20nom_du%2Fpackage” message=”composer require” highlight=”” provider=”manual”/]

Si jamais la librairie est mal documentée et ne vous donne pas le nom du package, celui-ci se trouve dans le fichier composer.json du projet que vous voulez inclure au niveau du champ name.

Utilisation de Guzzle

J’ai presque envie de vous dire que vous n’avez plus qu’à faire “bon usage” des librairies. Il vous suffit d’un use sur la class que vous souhaitez charger et c’est parti. C’est souvent une class dites “bootstrap” pour charger complètement une librairie. Bref, voici un exemple pour Guzzle :

[pastacode lang=”php” manual=”%3C%3Fphp%0A%2F%2F%20wp-content%2Fthemes%2Fmon_theme%2Ffunctions.php%0A%0Arequire%20’vendor%2Fautoload.php’%3B%0A%0Ause%20GuzzleHttp%5CPsr7%5CRequest%20as%20GuzzleRequest%3B%0Ause%20GuzzleHttp%5CClient%3B%0A%0A%24request%20%3D%20new%20GuzzleRequest(‘GET’%2C%20’https%3A%2F%2Fgoogle.fr’)%3B%0A%24client%20%20%3D%20new%20Client()%3B%0A%24promise%20%3D%20%24client-%3EsendAsync(%24request)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%3Ethen(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20function%20(%24response)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20echo%20%24response-%3EgetBody()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%3B%0A%24promise-%3Ewait()%3B%0A” message=”Exemple” highlight=”” provider=”manual”/]

Le résultat de la requête va vous afficher la page de Google. Rien de bien grandiose mais vous voyez un exemple avec Guzzle en utilisant (use) deux class de la librairie :

  • Request  (sur laquelle j’ai mis un alias GuzzleRequest)
  • Client

Vous voyez, il suffit d’en faire bon usage ! :)

Un risque dans son utilisation avec WordPress ?

Suite à la publication de l’article, beaucoup d’entre vous se sont inquiétés de la bonne entente d’une librairie dans l’utilisation d’une même librairie sur plusieurs plugins : est-il possible d’avoir un conflit ?

Le risque existe si la librairie ne gère pas le cas d’un conflit (et il est difficile de le voir à l’avance). De fait, pour être “safe”, je conseil d’avantage l’utilisation de composer sur un projet complet (site) plutôt que de l’envoyer dans un plugin que l’on va distribuer au risque de se retrouver en conflit avec un autre plugin (sauf si vous savez gérer le cas d’un conflit :) e.g WP GoD)

 

N’hésitez pas si vous avez des questions, direction les commentaires !

Cet article a été mis à jour il y a 2736 jours - Il n'est peut être plus à jour !

Article écrit par Thomas

Software Engineer

Grand passionné des technologies web et de la science de l’informatique, je ne me restreins pas à un seul langage / une seule technologie. Je passe d’abord par une approche conceptuelle des projets avant d’admettre quel langage faut-il utiliser.

Développeur PHP / JavaScript. J’utilise ReactJS, NextJS et WordPress. Je m’amuse avec BabylonJS. Je versionne avec Git. Je compile avec Webpack et je déploie avec Now.

0 Commentaire