© Mayflower GmbH 2012
PHP Dependency und Paket Management mit Composer
Dominik Liebler I 22. März 2012
Mayflower GmbH I 2
Dependency Management, warum eigentlich?
I AbhängigkeitenFramework (ZF, Symfony2, ...)ORMAPI Clients
I Code ReusabilityRauslösen von wiederverwendbarem Codeviele kleine Libraries statt Framework MonolithenDRY und Don't reinvent the wheel!
Mayflower GmbH I 3
Warum nicht PEAR verwenden?
I globale Installation von Paketen
I schwierige Kontrolle der Paketversionen im Projekt
I QA Prozess bei pear.php.netCoding StandardsRFCs
I Aufsetzen eines PEAR Channels zeitaufwändig und nicht einfach genug
Mayflower GmbH I 4
Composer!
Mayflower GmbH I 5
Warum Composer?
I lokale Installation von Paketen
I Config im Repositorygleiche Versionen bei jedem DeveloperDependencies an zentraler Stelle dokumentiert
I direkter Zugriff auf git, svn, tar.gz files
I zentrales Repository/ Channel nicht zwingend benötigt
Mayflower GmbH I 6
2 Teile
I Composer
Dependency Manager
http:/ / getcomposer.org
I Packagist
Default Paketrepository
http:/ / packagist.org
Mayflower GmbH I 7
History
I Start: ~April 2011
I Einflüsse: npm (node.js) und bundler (Ruby)
I Wurzeln in der Symfony2 Communitywird seit Anfang 2012 für Symfony2 verwendet
I > 400 Pakete auf packagist.org
I Github Service Hook für Packagist
Mayflower GmbH I 8
Composer Architektur
I einzelnes PHAR Paket
I simple JSON Configs
I bedient externe Tools für VCS
I kann git, svn, hg, zip, tar.gz, etc.
I benutzt APIs von Github, Bitbucket
Mayflower GmbH I 9
curl -s http://getcomposer.org/installer | php
Installation
Mayflower GmbH I 10
Paketkonfigurationen
Mayflower GmbH I 11
Beispiel: Paket von Packagist (composer.json)
{"require": {"doctrine/couchdb": "*"}}
Mayflower GmbH I 12
php composer.phar install
Pakete installlieren
Mayflower GmbH I 13
Beispiel: Paket von Github
{ "repositories": [ { "type": "vcs", "url": "https://github.com/nrk/predis" } ], "require": { "predis/predis": "v0.7.0" }}
Mayflower GmbH I 14
php composer.phar update
Pakete updaten
Mayflower GmbH I 15
Beispiel: Paket von PEAR
{ "repositories": [ { "type": "pear", "url": "http://pear2.php.net" } ], "require": { "pear-pear2/PEAR2_HTTP_Request": "*" }}
Mayflower GmbH I 16
Beispiel: Paket von Subversion
{ "repositories": [{ "type": "package", "package": { "name": "zend/framework", "version": "1.11.11", "source": { "url": "http://framework.zend.com/svn/framework/standard", "type": "svn", "reference": "tags/release-1.11.11/" } } }], "require": { "zend/framework": "1.11.*" }}
Mayflower GmbH I 17
Beispiel: ZIP Datei
{ "repositories": [{ "type": "package", "package": { "name": "smarty/smarty", "version": "3.1.7", "dist": { "url": "http://www.smarty.net/files/Smarty-3.1.7.zip", "type": "zip" } } }], "require": { "smarty/smarty": "3.1.*" }}
Mayflower GmbH I 18
Autoloading: PSR-0
I PSR-0 StandardKlasse \ Foo\ Bar in Datei / project/ Foo/ Bar.php
I Classloader wird generiertvendor/.composer/autoload.phpvendor/.composer/autoload_namespaces.php
I Einbinden:require 'vendor/.composer/autoload.php';
Mayflower GmbH I 19
= eigenes Package!
Wiederverwendbarer Code?
Mayflower GmbH I 20
Beispiel: UUID library
{ "name": "domnikl/uuid", "type": "library", "description": "UUID generator class for PHP", "keywords": ["uuid"], "homepage": "http://www.mayflower.de", "license": "MIT", "authors": [ {"name": "Dominik Liebler", "email": "[email protected]"} ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Mayflower\\Uuid": "lib/" } }}
Mayflower GmbH I 21
eigene Repositories
Mayflower GmbH I 22
Satis
I Symfony2 Console Anwendung
I lightweight
I erzeugt Static Repositories
I lagert Paketquellen aus (packages.json)
I für kleine Projekte geeignet
I https:/ / github.com/ composer/ satis
Mayflower GmbH I 23
Packagist
I Symfony2 und Doctrine2 Webanwendung
I MySQL, PostgreSQL, SQLite, etc.
I crawlt Pakete selbstständig
I Sources: git, svn, hg
I Suche nach Paketen
I https:/ / github.com/ composer/ packagist
Mayflower GmbH I 24
Packagist
29.03.12 Mayflower GmbH 25
Vielen Dank für Ihre Aufmerksamkeit!
Referent Dominik [email protected]+49 931 35965 1180Mayflower GmbHGneisenaustraße 10/ 1197074 Würzburg@domnikl