2. About Me
Belgian living in Zürich, Switzerland
Building the internet for 10 years
http://seld.be
Symfony2, Composer and other OSS contributions
http://github.com/Seldaek
Working at Nelmio
http://nelm.io
Symfony2 & frontend performance consulting
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
3. Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
4. Managing
Packages vs Dependencies
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
5. Package Management in PHP
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
6. The Composer Ecosystem
github.com/composer
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
7. The Composer Ecosystem
Composer - CLI Tool
Easy to use
Installs deps per-project
Flexible and embeddable
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
8. The Composer Ecosystem
Packagist - Package Repository
Aggregates PHP libraries
Open to all OSS projects
Feeds on VCS repositories
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
9.
10. Early adopters are loving it
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
11. The Composer Ecosystem
Satis - Micro Repository
Minimalistic
Useful for closed code
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
13. Using a Composed Project
git clone https://github.com/igorw/trashbin
Cloning into trashbin...
cd trashbin/
curl -s http://getcomposer.org/installer | php
All settings correct for using Composer
Composer successfully installed to: /home/bob/trashbin/composer.phar
Use it: php composer.phar
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
14. Using a Composed Project
php composer.phar install
Installing from lock file
- Package symfony/class-loader (2.1.0-dev)
Downloading
Unpacking archive
Cleaning up
[...]
- Package predis/predis (dev-master)
Downloading
Unpacking archive
Cleaning up
- Package twig/twig (1.6.0)
Downloading
Unpacking archive
Cleaning up
Generating autoload files
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
18. Avoiding version chaos
in your team
composer.lock
Lists packages & versions
Replaces composer.json
Created by composer install (installs your dependencies)
Updated by composer update (updates your dependencies)
Must be committed in your VCS and shipped with your releases
Benefits
Everyone on a team works with exactly the same dependency versions
When deploying, all machines run exactly the same dependency versions
Users will never get dependency versions that you did not test with
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
19. Autoloading
Libraries/projects define their namespaces:
1 "autoload": {
2 "psr-0": {"Predis": "lib/"}
3 }
Composer builds an autoloader for you:
1 vendor/.composer/
2 autoload_namespaces.php
3 autoload.php
4 ClassLoader.php
5 installed.json
Trashbin uses the generated autoloader:
1 require_once __DIR__.'/../vendor/.composer/autoload.php';
2
3 use SilexApplication;
4 use SilexExtensionTwigExtension;
5
6 use SymfonyComponentFinderFinder;
7 use SymfonyComponentHttpFoundationResponse;
8
9 $app = new Application();
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
20. Autoloading Tests
Add your own namespaces for testing purposes in PHPUnit's bootstrap:
1 # tests/bootstrap.php
2
3 $loader = require_once __DIR__.'/../vendor/.composer/autoload.php';
4
5 $loader->add('MyTest', __DIR__);
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
22. Depending on packages without composer.json
01 "repositories": [
02 {
03 "type": "package",
04 "package": {
05 "name": "vendor/package",
06 "version": "1.0.0",
07 "dist": {
08 "url": "http://example.org/package.zip",
09 "type": "zip"
10 },
11 "source": {
12 "url": "git://example.org/package.git",
13 "type": "git",
14 "reference": "tag name, branch name or commit hash"
15 }
16 }
17 }
18 ],
19 "require": {
20 "vendor/package": "1.0.0"
21 }
Note: repositories are only available to the root package
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
23. State of the Project
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
24.
25. Adoption
>500 packages on Packagist (+150 in
Feb.)
Alpha1 just released
Many early adopters
Supported by frameworks/libs
Chef recipes http://goo.gl/1QMKp
(Integration in apps for plugins)
(Integration by PaaS providers)
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
26. Missing Features
Human readable error reporting
User-friendliness on expected failures
Better support for beta/alpha/.. releases
Many more little things:
github.com/composer/composer/issues
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
28. Look around.
Write small libs.
Share code.
Reuse things.
Reinvigorate PHP
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be
29. Find Out More
GetComposer.org
Packagist.org
github.com/composer
composer-dev google group
#composer & #composer-dev
Jordi Boggiano Company nelm.io
Twitter @seldaek Blog seld.be