• 30 hours
  • Medium

Free online content available in this course.

Videos available in this course

Certificate of achievement available at the end this course

Got it!

Last updated on 5/13/19

Installer Symfony grâce à Composer

Log in or subscribe for free to enjoy all this course has to offer!

Qu'est-ce que Composer ?

Cette section est une parenthèse sur l'outil Composer.

Cet outil ne fait absolument pas partie de Symfony, mais son usage est tellement omniprésent dans la communauté Symfony, et même dans la communauté PHP dans son ensemble, que je me dois de vous le présenter. Parlons un peu de cet outil de gestion de dépendances, qui va nous servir à installer Symfony en lui-même, mais aussi des futures bibliothèques dont nous nous servirons tout au long de ce cours.

Un gestionnaire de dépendances

Composer est un outil pour gérer les dépendances en PHP. Les dépendances, dans un projet, ce sont toutes les bibliothèques dont votre projet dépend pour fonctionner. Par exemple, si votre projet utilise la bibliothèque SwiftMailer pour envoyer des e-mails, il « dépend » donc de SwiftMailer. Autrement dit, SwiftMailer est une dépendance dans votre projet.

Composer a donc pour objectif de vous aider à gérer toutes vos dépendances. En effet, il y a plusieurs problématiques lorsqu'on utilise des bibliothèques externes :

  • Ces bibliothèques sont mises à jour. Il vous faut donc les mettre à jour une à une pour vous assurer de corriger les bogues de chacune d'entre elles.

  • Ces bibliothèques peuvent elles-mêmes dépendre d'autres bibliothèques. En effet, si une de vos bibliothèques dépend d'autres bibliothèques, cela vous oblige à gérer l'ensemble de ces dépendances (installation, mises à jour, etc.).

  • Ces bibliothèques ont chacune leur paramètres d'autoload, et vous devez gérer leur autoload pour chacune d'entre elles.

Composer va nous aider dans chacune de ces tâches.

Mais si je veux juste installer Symfony, ai-je vraiment besoin de Composer ?

Oui ! Composer s'est imposé comme un outil indispensable dans le monde PHP, et les développeurs de Symfony se servent de sa flexibilité pour en faire la méthode de prédilection pour installer Symfony lui-même. La plus évidente des raisons est que Symfony a aussi ses propres dépendances ! Vous verrez, une fois pris en main, vous ne pourrez plus vous en passer. ;)

Comment Composer sait où trouver les bibliothèques ?

Très bonne question. En effet, il est évident qu'un système de gestion ne peut fonctionner que si on peut centraliser les informations de chaque bibliothèque. C'est le rôle du site packagist.org.

Par exemple, voici la page pour la bibliothèque du squelette de Symfony (eh oui, c'est une bibliothèque comme une autre !) : packagist.org/packages/symfony/skeleton. Vous pouvez voir les informations comme le mainteneur principal, le site de la bibliothèque, etc. Mais ce qui nous importe le plus, ce sont les sources ainsi que les dépendances (dans la section  requires ).

Composer va donc lire ces informations, et a alors toutes les cartes en main pour télécharger Symfony ainsi que ses dépendances.

Un outil innovant… dans l'écosystème PHP

Ce genre d'outil de gestion de dépendances n'est pas du tout nouveau dans le monde informatique. Vous connaissez peut-être déjà APT, le gestionnaire de paquets de la distribution Linux Debian. Il existe également des outils de ce genre pour le langage Ruby par exemple. Cependant, jusque très récemment, il n'existait aucun outil de ce genre pour PHP. La forte communauté qui s'est construite autour de Symfony a fait naître le besoin d'un tel outil, et l'a ensuite développé.

Concrètement, comment ça marche ?

Concrètement, voici comment s'utilise Composer :

  • On définit dans un fichier la liste des bibliothèques dont le projet dépend, ainsi que leur version ;

  • On exécute une commande pour installer ou mettre à jour ces bibliothèques (et leurs propres dépendances donc) ;

  • On inclut alors le fichier d'autoload généré par Composer dans notre projet.

Mais avant de manipuler Composer, commençons par l'installer !

Vérifier l'installation de PHP en console

Composer étant un outil PHP, nous avons besoin avant toute chose de vérifier votre environnement PHP. En effet il faut que PHP soit bien configuré pour pouvoir s'exécuter via la console. Rassurez-vous, je vous guiderai à chaque fois que nous aurons besoin d'exécuter des commandes à la main.

Si vous êtes sous Linux ou Mac, vous ne devriez pas avoir de soucis, PHP est bien disponible en console. Si vous êtes sous Windows, rien n'est sûr. Dans tous les cas, vérifiez-le en ouvrant l'invite de commandes pour Windows, ou le terminal pour Linux.

Sous Windows

Lancez l'invite de commandes en ouvrant le menu démarrer et en tapant  cmd  : cliquez alors sur  Invite de commandes  (ou tapez simplement sur Entrée).

Une fenêtre semblable à la figure suivante devrait apparaître.

La console Windows
La console Windows

Puis exécutez la commande  php -v  :

C:\Users\alex>php -v
PHP 7.1.9 (cli) (built: Aug 30 2017 18:34:46) ( ZTS MSVC14 (Visual C++ 2015) x64 )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

Chez moi, tout va bien ! J'ai la version 7.1.9 de PHP et vous voyez ici que c'est la version CLI (pour Command Line Interface) qui est utilisée.

Sous Linux et Mac

Ouvrez le terminal et exécutez la même commande  :

winzou@laptop:~$ php -v

Si tout va bien

Si cette commande vous retourne bien la version de PHP et d'autres informations, c'est tout bon pour vous. Profitez-en pour vérifier votre version de PHP, nous aurons besoin ici de la version 7.1.3 au minimum. Si vous avez une version inférieur, vous devez d'abord le mettre à jour ;)

En cas d'erreur

La commande vous affiche une erreur ?

Si vous êtes sous Windows, votre PHP est sûrement bien installé mais Windows ne sait pas où le trouver, il faut juste le lui dire. Voici la démarche à suivre pour régler ce problème :

  1. Allez dans les paramètres système avancés : Démarrer > Panneau de configuration > Système et sécurité > Système > Paramètres système avancés ;

  2. Cliquez sur le bouton  Variables d'environnement…  ;

  3. Regardez dans la section  Variables utilisateurs  ;

  4. Trouvez l'entrée  Path  et sélectionnez-la ;

  5. Cliquez sur  Modifier  ;

  6. Cliquez sur  Nouveau  puis entrez votre répertoire PHP à la fin. C'est le répertoire dans lequel se trouve le fichier  php.exe . Dans mon cas par exemple, je mets :  C:\wamp\bin\php\php7.1.0 ;

  7. Confirmez en cliquant sur OK. Vous devez ensuite redémarrer l'invite de commandes pour prendre en compte les changements.

Le labyrinthe de Windows
Le labyrinthe de Windows

Si vous êtes sous Linux, vérifiez votre installation de PHP. Vous devez notamment avoir le paquet  php7-cli  , qui est la version console de PHP.

Dans les deux cas, vérifiez après vos manipulations que le problème est bien résolu. Pour cela, exécutez à nouveau la commande  php -v  . Elle devrait alors vous afficher la version de PHP.

Et voilà, vous pouvez maintenant utiliser PHP depuis la console !

Installer Composer

Sous Windows

Si vous êtes sous Windows, la méthode la plus facile est d'installer Composer via son exécutable d'installation, comme n'importe quel autre logiciel (mais n'oubliez pas que Composer est un outil fait 100% en PHP ;)).

Je vous invite à le télécharger depuis ce lien : getcomposer.org/Composer-Setup.exe. Suivez les instructions, en quelques clics vous aurez installé Composer !

Sous Linux et Mac

Cette méthode fonctionne également avec Windows en fait, exécutez simplement la commande suivante :

php -r "eval('?>'.file_get_contents('http://getcomposer.org/installer'));"

Si tout se passe bien vous devriez obtenir la sortie suivante :

All settings correct for using Composer
Downloading...

Composer (version 1.6.3) successfully installed to: C:\wamp\www\admin\composer.phar
Use it: php composer.phar

Cette commande télécharge et exécute le fichier PHP suivant : getcomposer.org/installer. Vous pouvez aller le voir, ce n'est pas Composer en lui-même mais son installateur. Il fait quelques vérifications (version de PHP, etc.), puis télécharge effectivement Composer dans le fichier  composer.phar .

Composer en lui-même, c'est ce fichier PHAR  composer.phar , c'est lui que nous allons exécuter par la suite.

Dans tous les cas

Vous pouvez déjà exécuter Composer pour vérifier que tout est OK :

C:\wamp\www>php composer.phar --version
Composer version 1.6.3 2018-01-31 16:28:17

N'hésitez pas à mettre à jour Composer lui-même de temps en temps. Il faut pour cela utiliser la commande  self-update  de Composer, comme suit :

C:\wamp\www>php composer.phar self-update
Updating to version 1.7.2 (stable channel).
 Downloading (100%)
Use composer self-update --rollback to return to version 1.6.3

Et voilà ! Mon Composer est à jour.

Cependant, l'installation n'est pas finie. En effet, pour récupérer certaines bibliothèques, Composer utilise Git.

Installer Git

Comme on l'a vu, pour récupérer les bibliothèques, Composer se base sur les informations répertoriées sur Packagist. Si pour certaines bibliothèques Composer peut télécharger directement des archives contenant les sources, pour d'autres il doit utiliser un gestionnaire de versions tel que Git.

En réalité, beaucoup de bibliothèques sont dans ce cas, c'est pourquoi l'installation de Git ne peut être évitée. Ce n'est pas grave, attaquons-la ! Je vais ici décrire rapidement son installation, mais sachez que le cours « Gérer vos codes source avec Git » de Mathieu Nebra sur le site OpenClassrooms détaille très bien son fonctionnement et son installation.

Installer Git sous Windows

Sous Windows, il faut utiliser Git for Windows. Téléchargez le fichier (environ 30Mo) et exécutez-le, cela va tout installer. Laissez les paramètres par défaut si vous ne savez pas quoi remplir, ils conviennent très bien.

Une fois l'installation finie, vérifiez que tout s'est bien déroulé en exécutant la commande :

git version

Elle devrait vous afficher la version tout juste installée :

C:\wamp\www>git version
git version 2.11.0.windows.3

Installer Git sous Linux

Sous Linux, c'est encore plus simple avec votre gestionnaire de paquets. Voici comment l'installer depuis la distribution Debian et ses dérivées (Ubuntu, etc.) :

sudo apt-get install git-core

Installer Symfony (enfin !)

Maintenant que tout est enfin prêt, nous pouvons installer Symfony lui-même !

Pour cela, placez-vous dans votre répertoire web habituel, par exemple  C:\wamp\www  sous Windows ou  /var/www  sous Linux :

Microsoft Windows [version 10.0.16299.125]
(c) 2017 Microsoft Corporation. Tous droits réservés.

C:\Users\alex> cd ../../wamp/www

C:\wamp\www>

Ensuite, une seule commande Composer suffit pour installer Symfony dans le répertoire  mooc-symfony4   :

C:\wamp\www> composer create-project symfony/skeleton mooc-symfony4

Installing symfony/skeleton (v4.0.5)
 - Installing symfony/skeleton (v4.0.5): Loading from cache
Created project in mooc-symfony4
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 21 installs, 0 updates, 0 removals
 - Installing symfony/flex (v1.0.68): Loading from cache
 - Installing symfony/polyfill-mbstring (v1.7.0): Loading from cache
 - Installing symfony/console (v4.0.4): Loading from cache
 - Installing symfony/routing (v4.0.4): Loading from cache
 - Installing symfony/http-foundation (v4.0.4): Loading from cache
 - Installing symfony/yaml (v4.0.4): Loading from cache
 - Installing symfony/framework-bundle (v4.0.4): Loading from cache
 - Installing symfony/http-kernel (v4.0.4): Loading from cache
 - Installing symfony/event-dispatcher (v4.0.4): Loading from cache
 - Installing psr/log (1.0.2): Loading from cache
 - Installing symfony/debug (v4.0.4): Loading from cache
 - Installing symfony/finder (v4.0.4): Loading from cache
 - Installing symfony/filesystem (v4.0.4): Loading from cache
 - Installing psr/container (1.0.0): Loading from cache
 - Installing symfony/dependency-injection (v4.0.4): Loading from cache
 - Installing symfony/config (v4.0.4): Loading from cache
 - Installing psr/simple-cache (1.0.0): Loading from cache
 - Installing psr/cache (1.0.1): Loading from cache
 - Installing symfony/cache (v4.0.4): Loading from cache
 - Installing symfony/dotenv (v4.0.4): Loading from cache
Writing lock file
Generating autoload files
Symfony operations: 4 recipes (005bf225c4fb817c34821c8b2459a895)
 - Configuring symfony/flex (>=1.0): From github.com/symfony/recipes:master
 - Configuring symfony/framework-bundle (>=3.3): From github.com/symfony/recipes:master
 - Configuring symfony/console (>=3.3): From github.com/symfony/recipes:master
 - Configuring symfony/routing (>=4.0): From github.com/symfony/recipes:master
Executing script cache:clear [OK]
Executing script assets:install --symlink --relative public [OK]

Some files may have been created or updated to configure your new packages.
Please review, edit and commit them: these files are yours.


 What's next?


 * Run your application:
 1. Change to the project directory
 2. Execute the php -S 127.0.0.1:8000 -t public command;
 3. Browse to the http://localhost:8000/ URL.

 Quit the server with CTRL-C.
 Run composer require server --dev for a better web server.

 * Read the documentation at https://symfony.com/doc

Et voilà ! Vous venez de télécharger tout le nécessaire pour faire tourner un projet Symfony dans le répertoire  C:\wamp\www\mooc-symfony4   (ou  /var/www/mooc-symfony4   sur Linux). Vous voyez que Composer a bien travaillé. Il a tout d'abord créé un projet dans le répertoire Symfony, puis il a téléchargé toutes les dépendances de ce projet. Rappelez-vous, Composer est un gestionnaire de dépendances, c'est son travail !

Vous pouvez dès à présent exécuter Symfony, félicitations ! Rendez-vous sur la page http://localhost/mooc-symfony4/public/index.php, vous devriez avoir quelque chose ressemblant à la figure suivante.

La page d'accueil de Symfony
La page d'accueil de Symfony

Le fichier  composer.json

Lorsque nous avons exécuté la commande pour créer le projet Symfony, vous avez vu que Composer a installé en même temps une bonne dizaine d'autres bibliothèques :  symfony/flex ,  symfony/console ,  symfony/yaml , etc. Ces bibliothèques sont les dépendances de la bibliothèque initiale que nous avons demandé à Composer :  symfony/skeleton .

Comment Composer connaît cette liste des dépendances ?

C'est là qu'intervient le fichier  composer.json . Ouvrez-le pour voir son contenu, ce qui nous intéresse c'est surtout la section  require  que je vous remets ici :

{
    "type": "project",
    "license": "proprietary",
    "require": {
        "php": "^7.1.3",
        "ext-iconv": "*",
        "symfony/console": "^4.0",
        "symfony/flex": "^1.0",
        "symfony/framework-bundle": "^4.0",
        "symfony/lts": "^4@dev",
        "symfony/monolog-bundle": "^3.1",
        "symfony/yaml": "^4.0"
    },
    // ...
}

Chaque ligne de la section require correspond à une bibliothèque dont dépend votre projet, autrement dit, une dépendance.

Ce fichier n'est pas apparu par magie, il était contenu dans la bibliothèque  symfony/skeleton . En fait, chaque bibliothèque a son propre fichier  composer.json  pour y indiquer ses dépendances. Du coup, lorsque vous installez une bibliothèque, vous installez également toutes ses dépendances, et même les dépendances de ses dépendances (s'il y en a) !

Pour chaque dépendance, on indique la version que l'on veut. Voici les différentes syntaxes que vous pouvez utiliser pour indiquer les versions :

Valeur

Exemple

Description

Un numéro de version exact

4.0

Composer téléchargera cette version exacte.

Une plage de versions

>=4.0.1,<5

Composer téléchargera la version la plus à jour, à partir de la version 4.0.1 et en s'arrêtant avant la version 5. Par exemple, si les dernières versions sont 4.0, 4.1 et 5.0, Composer téléchargera la version 4.1.

Une plage de versions sémantique

^4.1

Composer téléchargera la version la plus à jour, à partir de la version 4.1 et en s'arrêtant avant la prochaine version majeure, la 5.0. C'est une façon plus simple d'écrire">=4.1,<5.0" avec la syntaxe précédente. C'est la façon la plus utilisée pour définir la version des dépendances.

Un numéro de version avec joker « * »

4.0.*

Composer téléchargera la version la plus à jour qui commence par 4.0. Par exemple, il téléchargerait la version 4.0.17, mais pas la version 4.1.1.

Un nom de branche « dev-XXX »

dev-master

C'est un cas un peu particulier, où Composer ira chercher la dernière modification d'une branche Git en particulier. N'utilisez cette syntaxe que pour les bibliothèques dont il n'existe pas de vraie version. Vous verrez assez souvent  dev-master , où "master" correspond à la branche principale d'un dépôt Git.

Mettre à jour ses dépendances

Pour mettre à jour toutes les dépendances d'un projet, il faut exécuter la commande suivante :

C:\wamp\www> composer update

Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files
Executing script cache:clear [OK]
Executing script assets:install --symlink --relative public [OK]

Evidemment, comme on vient tout juste d'installer Symfony, Composer avait déjà téléchargé les dernières versions de toutes les bibliothèques. D'où le  Nothing to install or update que Composer nous sort.

Lorsqu'une nouvelle version de l'une de vos dépendances apporte une fonctionnalité qui vous intéresse, ou résout un bogue que vous subissez, c'est donc cette commande  composer update  qu'il faudra exécuter pour récupérer la dernière mise à jour.

Je vois aussi un fichier  composer.lock , à quoi correspond-il ?

A chaque fois que Composer met à jour ou installe une bibliothèque, il stocke la version exacte qu'il vient d'installer dans le fichier  composer.lock . Cela permet de pouvoir réinstaller exactement les mêmes versions sur une autre machine.

Par exemple, sur notre machine de développement, on utilise la commande  composer update pour mettre à jour des bibliothèques, faire des tests (automatiques et manuels), vérifier que tout marche bien. Par contre, sur un serveur de production, lorsqu'on y installe notre application, on veut utiliser les bibliothèques dans les versions exactes qu'on a testé préalablement, pas d'autres !

Sur un serveur de production, c'est donc la commande  composer install  qu'on va utiliser. Elle va lire le fichier  composer.lock , et réinstaller exactement les mêmes bibliothèques dans les mêmes versions. 

En résumé

  • Composer est un outil de gestion de dépendances en PHP, il est indispensable dans le monde PHP d'aujourd'hui

  • L'installation de Symfony se fait via une seule commande de Composer :  composer create-project

  • La mise à jour de nos bibliothèques se fait via la commande  composer update

  • Nous sommes prêts à démarrer ! 

Example of certificate of achievement
Example of certificate of achievement