En décembre 2018, lors de la conférence SymfonyCon de Lisbonne, Fabien Potansier - le créateur du framework Symfony a présenté un certain symfony.phar - un outil pour créer rapidement des applications Symfony basées sur les modèles de projet officiels: squelette , squelette de site Web ou démo . Il vous permet également d'exécuter un serveur Web local pour le développement.
Ensuite, l'outil a été réécrit dans le langage Golang, ce qui a permis de mettre en œuvre de nombreuses fonctionnalités supplémentaires telles que la prise en charge du protocole https pour le serveur Web local, une intégration étroite avec SymfonyCloud et plus encore! Je vous invite, cher lecteur, à vous familiariser avec cet outil plus en détail, car il ne fonctionne pas uniquement dans le cadre du framework Symfony.
Dans cet article, nous examinerons l'outil dans le contexte du développement local et n'affecterons pas l'intégration avec SymfonyCloud.
Création de projet
Pour créer un nouveau projet Symfony basé sur l'un des modèles officiels, vous devez exécuter la commande:
$ symfony new [--full | --demo] <path-to-project>
Par défaut, le modèle de squelette minimum est utilisé. Pour installer le site Web-squelette, vous devez exécuter la commande avec l'option --full
. Par conséquent, pour installer le projet de démonstration , vous devez exécuter la commande avec l'option --demo
.
Sous le capot, symfony new
exécute la commande composer create-project
, puis initialise un nouveau référentiel Git et crée immédiatement une validation initiale.

Serveur local
Pour démarrer le serveur, il suffit d'exécuter la commande à la racine de l'application
$ symfony serve

il analysera les SAPI disponibles sur la machine utilisée et choisira le meilleur parmi ceux existants, en utilisant les priorités suivantes: placez d'abord PHP FPM, puis PHP CGI et à la fin de PHP CLI. La liste des SAPI disponibles peut être consultée avec la commande:
$ symfony local:php:list

Après cela, l'équipe démarrera le serveur, qui sera disponible à l'adresse 127.0.0.1
et sélectionnera le port libre à partir de 8000
.
Par défaut, le serveur démarre de manière interactive. Nous voyons immédiatement les journaux du serveur et des applications, mais notre terminal est bloqué. Le serveur peut être démarré en mode démon. Pour ce faire, ajoutez l'option -d
lors de l'exécution de la commande symfony serve
.
Les journaux peuvent être consultés en exécutant la commande:
$ symfony server:log
Vous pouvez également voir l'état du serveur en cours d'exécution à l'aide de la commande:
$ symfony server:status
pour arrêter le serveur en cours d'exécution, utilisez la commande:
$ symfony server:stop
UPD: Auparavant, nous utilisions le paquet symfony / web-server-bundle pour démarrer le serveur. Avec l'avènement de Symfony CLI, ce package devient peu pertinent, car il ne peut démarrer le serveur qu'en utilisant PHP CLI SAPI et ne prend pas en charge HTTPS, les noms de domaine, PHP FPM SAPI, etc.
Prise en charge TLS
Certains services ou bibliothèques tiers nécessitent que vous envoyiez des demandes à l'aide du protocole HTTPS. La CLI Symfony offre la possibilité de configurer très facilement la prise en charge TLS en installant des composants supplémentaires à l'aide de la commande suivante:
$ symfony server:ca:install

puis redémarrez votre navigateur et le tour est joué - le support TLS est configuré! Démarrez le serveur avec la commande symfony serve
et vous pouvez vous rendre sur le site en utilisant le protocole HTTPS.
Je n'aime pas vraiment ouvrir tous les projets sur https://127.0.0.1:8000
ou https://localhost:8000
, mais qu'en est-il de vous? Cela apporte son inconvénient: si plusieurs projets s'exécutent en même temps, vous devez vous rappeler sur quel port le projet fonctionne; lorsque le serveur redémarre, les ports peuvent changer, etc.
Symfony CLI résout également ce problème! Il nous fournit un serveur proxy avec lequel vous pouvez créer de beaux noms de domaine. Pour ce faire, liez le nom de domaine souhaité à notre projet à l'aide de la commande:
$ symfony proxy:domain:attach <domain-name>

ainsi, le domaine demo-project.com
lié au répertoire du projet. Ensuite, nous devons démarrer le serveur proxy avec la commande:
$ symfony proxy:start

Nous avons lancé le serveur proxy en mode démon et il est disponible à notre adresse http://127.0.0.1:7080
, nous pouvons l'ouvrir dans un navigateur:

où nous verrons une liste de domaines, les chemins d'accès aux projets dans le système de fichiers et l'état du serveur pour chaque projet. Dans cette capture d'écran, vous pouvez voir que tous les serveurs sont en statut Stopped
, c'est-à-dire qu'ils ne fonctionnent pas encore. L'étape suivante, nous devons ajouter ce serveur proxy dans les paramètres du système d'exploitation

Ceci termine la configuration du serveur proxy, puis vous devez démarrer le serveur avec la commande symfony serve
déjà connue. En plus de l'adresse IP avec le port, nous verrons notre nom de domaine, que nous pouvons utiliser dans le navigateur! Le suffixe .wip est ajouté à tous les noms de domaine.

Autrement dit, dans le cas de l'utilisation du flux de serveur proxy, le lancement du projet change légèrement:
- Nous démarrons le serveur proxy
$ symfony proxy:start
- Nous démarrons le serveur pour l'application
$ symfony serve
Pour terminer le travail avec le projet, nous «reflétons» les actions décrites ci-dessus:
- Nous arrêtons le serveur
$ symfony server:stop
- Arrêtez le serveur proxy
$ symfony proxy:stop
Pour simplifier ces opérations, je recommande d'utiliser l'utilitaire GNU Make.
Changement de version PHP
Si vous utilisez différentes versions de PHP sur différents projets, vous avez probablement rencontré le problème de basculer entre les versions. Ce serait formidable d'avoir une sorte d'outil automatique pour cela, non? Symfony CLI peut résoudre ce problème! Il vous suffit de créer le fichier .php-version
à la racine du projet et de spécifier la version souhaitée comme contenu.
$ echo "7.2" > .php-version

Comme vous pouvez le voir dans la capture d'écran ci-dessus, la CLI Symfony a lu le fichier .php-version et a démarré le serveur en utilisant la version spécifiée dans ce fichier.
De plus, la CLI Symfony nous fournit un wrapper sur la CLI PHP, qui prend également en compte la version de PHP spécifiée dans le fichier .php-version. Autrement dit, si vous devez appeler des scripts de console, par exemple bin/console
, utilisez-le.
$ symfony php

Pour plus de commodité, vous pouvez créer un alias pour cette commande pour gagner du temps et éviter les erreurs d'écriture de la commande. Par exemple, je me suis créé un pseudonyme:
$ echo "alias sphp='symfony php'" >> ~/.bash_profile && source ~/.bash_profile
Symfony CLI fournit un wrapper similaire pour Composer, vous n'aurez donc aucun problème avec lui non plus. Pour plus de commodité, vous pouvez créer un alias pour ce wrapper. J'ai ce scomposer :
$ echo "alias scomposer='symfony composer'" >> ~/.bash_profile && source ~/.bash_profile
Vérifier les packages vulnérables
En prime, la CLI Symfony fournit une commande pour vérifier les packages compositeurs vulnérables dans votre projet. Vous n'avez plus besoin d'installer la dépendance Symfony Security Checker dans le projet. De plus, la documentation officielle suggère que la version intégrée à Symfony CLI fonctionne mieux car elle ne fait pas de requêtes HTTP pour l'API officielle. Vous pouvez exécuter le test avec la commande:
$ symfony security:check

Conclusion
Symfony CLI est un composant assez pratique de l'infrastructure d'application locale. Il a la capacité d'exécuter un serveur Web prenant en charge le protocole HTTPS, de créer des noms de domaine, d'automatiser la commutation de la version PHP pour chaque projet et de vérifier les dépendances pour les vulnérabilités.
La documentation officielle du composant est disponible sur ce lien .
Toutes les questions et problèmes peuvent être décrits dans le dépôt officiel symfony / cli sur GitHub.
Partagez votre expérience avec cet outil dans les commentaires.
Merci de votre attention!