Présentation de la gestion de dépendance grâce à Composer. Comment l'installer et le principales commandes à connaitre. Présentation et demonstration du projet Toran Proxy.
2. Romain Cambien
● Co-organisateur AFUP Marseille
● Développeur Symfony
● Administrateur système
● Co-fondateur et
directeur Technique chez Riverline
NOUS RECRUTONS ;)
@r_cambien
3. Gestion des dépendances :
● Manuelle :
Télécharger, décompresser, recommencer ...
● PEAR : http://pear.php.net/
● Pas de dépendances par projet
● Installation système
● Peu de paquets, ajout de paquets compliqués
PEAR : 600 vs Compser : > 50 000
4. Composer
● Créé fin 2011 par Nils Adermann et Jordi
Boggiano
● Deux parties :
○ Composer : le client en ligne de commande
○ Packagist : le dépôt de paquets par défaut
● Inspiré de NPM et Bundler
● Promotion du DRY
5. Le client en ligne de commande
● Installation :
$ curl -sS https://getcomposer.org/installer | php.
Astuce :
$ curl -sS http://getcomposer.org/installer | php -- --
install-dir=~/bin --filename=composer.
● Mise à jour
$ composer self-update.
● Installer les dépendances
$ composer install.
6. Création d’un projet
$ composer create-project [package] [path] [version]
● Copie le paquet dans le répertoire cible
● Installe les dépendances
Exemples avec des frameworks :
Zend :
$ composer create-project --stability="dev"
zendframework/skeleton-application path/to/install
Laravel :
$ composer create-project --prefer-dist
laravel/laravel path/to/install
Symfony :
$ composer create-project
symfony/framework-standard-edition path/to/install
7. Le fichier composer.json
{
"name": "symfony/framework-standard-edition",
"license": "MIT",
"type": "project",
"description": "The "Symfony Standard Edition" distribution",
"autoload": {
"psr-0": { "": "src/" }
},
"require": {
"php": ">=5.3.3",
"symfony/symfony": "2.3.*",
"doctrine/orm": "~2.2,>=2.2.3,<2.5",
"doctrine/dbal": "<2.5",
"doctrine/doctrine-bundle": "~1.2",
"twig/extensions": "1.0.*",
"symfony/assetic-bundle": "~2.3",
"symfony/swiftmailer-bundle": "~2.3",
"symfony/monolog-bundle": "~2.4",
"sensio/distribution-bundle": "~2.3",
"sensio/framework-extra-bundle": "~3.0,>=3.0.2",
"sensio/generator-bundle": "~2.3",
"incenteev/composer-parameter-handler": "~2.0"
},
"scripts": {
"post-install-cmd": [ ... ],
"post-update-cmd": [ ... ]
},
"config": {
"bin-dir": "bin"
},
"minimum-stability": "stable",
“extra”: { ... }
}
Nom du projet
Configuration de l’autoloader
Dépendances
Stabilité par défaut
Supérieur à une version
N’importe quelle version 2.3
N'importe quelle version non
majeur ( entre 1.2 et 2 )
N’importe quelle version 3
mais supérieure à 3.0.2
Inférieur à une version
“test/test”: “dev-master”
Dernier commit
dans le dépôt DEV
Forcer la stabilité : “2.*@dev”
8. Où trouver les paquets ?
● Packagist.org : le dépôt par défaut
$ composer require "monolog/monolog: 1.12.*".
● Git / SVN / Mercurical :
{ .
"repositories": [ .
{ .
"type": "vcs", .
"url": "https://github.com/igorw/monolog" .
} .
], .
"require": { .
"monolog/monolog": "dev-bugfix" .
} .
} .
● Gestion des tags comme version du paquet
● Gestion des archives avec GitHub et BitBucket
10. Où trouver les paquets ?
● PEAR
{ .
"repositories": [ .
{ .
"type": "pear", .
"url": "http://pear2.php.net" .
} .
], .
"require": { .
"pear-pear2.php.net/PEAR2_Text_Markdown": "*", .
"pear-pear2/PEAR2_HTTP_Request": "*" .
} .
} .
PEAR sans les inconvénients de PEAR !
11. Le fichier composer.lock
● Généré par composer update
● Lu par composer install
● Conserver les versions exactes des paquets
Également la référence du commit pour les “dev-master”
● Doit être inclus dans le projet
● Ne doit pas être modifié à la main
12. Autoloader Composer
● Généré lors d’un update ou install
● Disponible dans ./vendor/autoload.php
● Respecte les règles de chaque paquet
○ PSR-0 : TestSubTestTestClass => Test/SubTest/TestClass.php
○ PSR-4
○ ClassMap : Cherche les classes dans tous les fichiers
○ File : inclus un fichier
● Peut être régénéré par :
$ composer dump-autoload
Astuce : --optimize pour compiler tous les chemins d'accès aux
classes pour de meilleures performances en PROD
NE PAS UTILISER EN DEV !!
13. Composer global
● Permet d’installer des outils PHP
● S’utilise en rajoutant l’argument global
$ composer global require "squizlabs/php_codesniffer=2.*"
$ composer global update
$ composer global remove squizlabs/php_codesniffer
● Installe les paquets dans :
~/.composer/vendor/
● Rendre disponible les binaires en ajoutant
dans le ~/.profile :
PATH=~/.composer/vendor/bin:$PATH
$ phpcs --version
PHP_CodeSniffer version 2.2.0 (stable) by Squiz (http://www.squiz.net)
14. Création d’un dépôt privé
● Packagist : https://github.com/composer/packagist
○ Installation et configuration complexes
○ Trop de fonctionnalités ( gestion utilisateurs, etc … )
● Satis : https://github.com/composer/satis
○ Packagist allégé
○ Reste complexe à configurer et à maintenir
● Toran Proxy : https://toranproxy.com/
○ Produit commercial par le créateur de Composer
○ Permet de soutenir le développement de Composer
○ Installation rapide et peu de configuration
Gratuit pour les développements personnels
15. Installation de Toran
● Télécharger
● Décompresser
● Renommer et configurer
./app/config/parameters.yml.dist
en ./app/config/parameters.yml
● Configurer un vhost sur ./web/
Astuce : Tester avec PHP >= 5.4 :
./app/console server:run --env=prod
● Configurer une Crontab pour ./bin/cron
● Terminer … ça marche !
18. Configurer un dépôt privé
Même fonctionnement que pour les dépôts privés dans le
composer.json !
19. Configuration de Toran
Activation du proxy Packagist
Configuration de la cache des archives :
● Lazy : Cache à la demande
● New tags : Cache toutes les versions plus récentes que
la plus vieille version en cache
● All : Cache toutes les versions