Skip to content

13. Annexes

13.1. Installation de PHP

Les exemples et l'étude de cas demandent [PHP] 8.4 ou une version plus récente ([Symfony] 8 l'exige), avec les extensions [intl] (la mise en forme des nombres et des dates, exemple 16, et les messages ICU, exemple 22), [pdo_mysql] (l'accès à [MySQL], exemple 28 et étude de cas), [mbstring] et [openssl]. Ils ont été testés avec la version 8.4.

Sous [Windows], le plus simple est [Laragon] (laragon.org), qui installe en une fois [PHP], [Composer], un serveur [MySQL] et l'outil d'administration [HeidiSQL]. Si la version de [PHP] fournie est antérieure à 8.4, on en télécharge une plus récente sur windows.php.net/download (version Thread Safe, archive [.zip]), que l'on décompresse dans le dossier [bin\php] de [Laragon] ; le menu PHP / Version de [Laragon] permet alors de la choisir. Le menu PHP / Extensions active une extension d'un clic ([intl], [pdo_mysql]). Le terminal de [Laragon] (bouton Terminal) connaît les commandes [php], [composer] et [mysql].

Sans [Laragon], on décompresse l'archive de [PHP] dans un dossier ([C:\php]), on ajoute ce dossier à la variable d'environnement [Path], puis on crée le fichier de configuration [php.ini] en copiant [php.ini-development], et l'on y retire le point-virgule qui commente les lignes des extensions nécessaires :

1
2
3
4
extension=intl
extension=mbstring
extension=openssl
extension=pdo_mysql

Sous [macOS], le gestionnaire de paquets [Homebrew] installe [PHP] et ses extensions courantes : [brew install php]. Sous [Linux] ([Ubuntu]), la version fournie par la distribution est souvent plus ancienne ; le dépôt [ppa:ondrej/php] fournit les versions récentes :

sudo add-apt-repository ppa:ondrej/php
sudo apt install php8.4-cli php8.4-intl php8.4-mbstring php8.4-mysql php8.4-xml php8.4-curl php8.4-zip

On vérifie l'installation dans une nouvelle console :

php -v
php -m

La première commande doit afficher un numéro de version égal ou supérieur à 8.4 (par exemple [PHP 8.4.12]) ; la seconde liste les extensions chargées, parmi lesquelles [intl] et [pdo_mysql]. La commande [php --ini] indique quel fichier [php.ini] est utilisé.

13.2. Composer

[Composer] est le gestionnaire de bibliothèques de [PHP] (getcomposer.org). Il est fourni par [Laragon] ; sous [Windows], sans [Laragon], on utilise son installateur ([Composer-Setup.exe]) ; sous [macOS], [brew install composer] ; sous [Linux], les instructions de la page getcomposer.org/download. On vérifie l'installation :

composer -V

Les commandes utiles, dans le dossier d'un projet (celui qui contient [composer.json]) :

1
2
3
4
5
composer install            # installer les bibliothèques du projet (dossier vendor)
composer show               # les bibliothèques installées
composer update             # passer aux versions les plus récentes permises par composer.json
composer require nom/paquet # ajouter une bibliothèque au projet
composer dump-autoload      # refabriquer le chargeur de classes (après l'ajout d'un dossier de classes)

[Composer] télécharge les bibliothèques depuis le dépôt [Packagist] (packagist.org) : il faut une connexion Internet lors de l'installation. Derrière un proxy d'entreprise, on indique le proxy par les variables d'environnement [HTTP_PROXY] et [HTTPS_PROXY]. Le dossier [vendor] ne se copie pas d'une machine à l'autre (il peut contenir des chemins absolus, et il est volumineux) : on le recrée par [composer install]. C'est pourquoi il ne fait pas partie des codes du cours. Le dossier [exemples] a son dossier [vendor], partagé par les 28 exemples ; l'étude de cas a le sien.

L'étude de cas utilise le composant [Runtime] de [Symfony], qui est aussi un greffon de [Composer] : c'est lui qui fabrique le fichier [vendor/autoload_runtime.php] lu par [public/index.php]. [Composer] demande l'autorisation d'exécuter un greffon ; le fichier [composer.json] de l'application la donne (rubrique [allow-plugins]). Sous [Linux], [Composer] refuse d'exécuter les greffons quand il est lancé par le compte [root], sauf si la variable d'environnement [COMPOSER_ALLOW_SUPERUSER] vaut [1] : sans elle, le fichier [autoload_runtime.php] manquerait (cf. « Les problèmes fréquents », dans l'étude de cas). Le mieux est de ne pas travailler sous le compte [root].

13.3. Installation de Visual Studio Code

[Visual Studio Code] se télécharge sur code.visualstudio.com. On y ajoute trois extensions (menu Affichage / Extensions) :

  • PHP Intelephense : la complétion, la navigation dans le code (y compris celui de [Symfony], dans le dossier [vendor]), le signalement des erreurs ;
  • Twig Language 2 : la coloration syntaxique et la complétion des vues [Twig] (fichiers [.html.twig]) ;
  • YAML (de [Red Hat]) : la coloration et la vérification des fichiers de configuration ([config/packages/*.yaml]) et des dictionnaires ([translations/*.yaml]).

L'extension PHP Debug permet d'exécuter le code pas à pas, avec le débogueur [Xdebug] (une extension de [PHP], à installer à part : xdebug.org).

On ouvre le dossier [exemples], ou le dossier de l'étude de cas (menu Fichier / Ouvrir le dossier). Le terminal intégré (menu Terminal / Nouveau terminal) permet de lancer les applications, et les commandes [php bin/console ...], sans quitter l'éditeur.

13.4. Installation de MySQL avec Laragon

[Laragon] installe sous [Windows] un serveur [MySQL] prêt à l'emploi, avec l'outil d'administration [HeidiSQL]. Après installation :

  • le bouton Démarrer tout lance le serveur [MySQL], sur le port 3306 ;
  • l'utilisateur [root] n'a pas de mot de passe : ce sont les valeurs de la variable [DATABASE_URL] des fichiers [.env] de l'exemple 28 et de l'étude de cas ([mysql://root:@127.0.0.1:3306/...]) ;
  • le bouton Base de données ouvre [HeidiSQL], où le menu Fichier / Exécuter un fichier SQL exécute les scripts [dbpersonnes.sql] (exemple 28) et [dbrdvmedecins2.sql] (étude de cas).

Sous [Linux] ou [macOS], on installera [MySQL] ou [MariaDB] avec le gestionnaire de paquets du système, et l'on exécutera les scripts avec le client en ligne de commande [mysql]. Le pilote [pdo_mysql] fonctionne avec les deux, sans aucun réglage. Sous [Linux], le compte [root] de [MariaDB] est souvent configuré pour ne se connecter que par le compte système [root] ([sudo mysql]) : on crée alors un utilisateur pour les applications, et on l'indique dans la variable [DATABASE_URL] de leur fichier [.env] ([mysql://cours:cours@127.0.0.1:3306/...]) :

sudo mysql -e "CREATE USER 'cours'@'localhost' IDENTIFIED BY 'cours'; GRANT ALL ON *.* TO 'cours'@'localhost';"

Avec [MariaDB], on indique aussi sa version dans la variable [DATABASE_URL] ([serverVersion=10.11.2-MariaDB] au lieu de [serverVersion=8.0.32], par exemple) : [Doctrine] adapte le SQL qu'il écrit à la base utilisée.

13.5. Installation de curl

[curl] est livré avec [Windows] 10 et 11, [macOS] et la plupart des distributions [Linux]. Sous [PowerShell], il faut taper [curl.exe] et non [curl] : dans les anciennes versions de [PowerShell], [curl] est un alias d'une autre commande ([Invoke-WebRequest]), dont les options sont différentes. Dans l'invite de commandes de [Windows] ([cmd]), les guillemets d'une chaîne JSON s'écrivent [\"] (exemple 11), et une URL qui contient des [&] doit être entourée de guillemets doubles.

13.6. L'outil symfony

[Symfony] propose un outil en ligne de commande, le programme [symfony] (Symfony CLI), qui n'est pas nécessaire pour suivre ce document, mais que l'on rencontre partout dans la documentation. Il s'installe en suivant les instructions de la page symfony.com/download : sous [Windows], avec le gestionnaire de paquets [Scoop] ([scoop install symfony-cli]) ; sous [macOS], avec [Homebrew] ([brew install symfony-cli/tap/symfony-cli]) ; sous [Linux], avec le gestionnaire de paquets du système. Les commandes les plus utiles :

1
2
3
4
symfony check:requirements      # la configuration de PHP convient-elle à Symfony ?
symfony new mon-projet --webapp # un nouveau projet complet (cf. introduction)
symfony server:start            # un serveur de développement (http://127.0.0.1:8000)
symfony console debug:router    # équivaut à php bin/console debug:router

Son serveur de développement fait la même chose que [php -S localhost:8000 -t public], avec quelques avantages : il trouve lui-même le dossier [public], il sait servir le site en HTTPS (après [symfony server:ca:install]), il peut tourner en arrière-plan ([symfony server:start -d], puis [symfony server:stop]), et il choisit la version de [PHP] du projet quand plusieurs sont installées. Le serveur intégré à [PHP], utilisé dans ce document, a l'avantage de n'avoir rien à installer.