SlideShare a Scribd company logo
Jordi Boggiano
@seldaek
http://nelm.io/

Dependency Management
with Composer
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
Jordi Boggiano     Company nelm.io
Twitter @seldaek       Blog seld.be
Managing
                   Packages vs Dependencies




Jordi Boggiano                                Company nelm.io
Twitter @seldaek                                  Blog seld.be
Package Management in PHP




Jordi Boggiano                                 Company nelm.io
Twitter @seldaek                                   Blog seld.be
The Composer Ecosystem
                        github.com/composer




Jordi Boggiano                                Company nelm.io
Twitter @seldaek                                  Blog seld.be
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
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
Dependency Management with Composer
Early adopters are loving it




Jordi Boggiano                                    Company nelm.io
Twitter @seldaek                                      Blog seld.be
The Composer Ecosystem
              Satis - Micro Repository
                   Minimalistic
                   Useful for closed code




Jordi Boggiano                               Company nelm.io
Twitter @seldaek                                 Blog seld.be
Usage Instructions
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
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
Using a Composed Project
              01 vendor/
              02     .composer/
              03     bin/
              04     pimple/
              05         pimple/
              06     predis/
              07         predis/
              08         service-provider/
              09     silex/
              10         silex/
              11     symfony/
              12         browser-kit/
              13         class-loader/
              14         css-selector/
              15         dom-crawler/
              16         event-dispatcher/
              17         finder/
              18         http-foundation/
              19         http-kernel/
              20         routing/
              21     twig/
              22         twig/




Jordi Boggiano                                              Company nelm.io
Twitter @seldaek                                                Blog seld.be
Downloading Project Dependencies
              composer.json
                   Located in project root directory
                   Defines dependencies
               1 {
               2       "require": {
               3           "silex/silex": ">=1.0.0-dev",
               4           "symfony/finder": "2.1-dev",
               5           "twig/twig": "1.*",
               6           "predis/service-provider": "dev-master"
               7       }
               8 }
              Source install: With install --prefer-source it clones/checks out the code.




Jordi Boggiano                                                                              Company nelm.io
Twitter @seldaek                                                                                Blog seld.be
Creating a Package Definition
              01 {
              02       "name": "predis/predis",
              03       "type": "library",
              04       "description": "Flexible and feature-complete Redis client",
              05       "keywords": ["nosql", "redis", "predis"],
              06       "homepage": "http://github.com/nrk/predis",
              07       "license": "MIT",
              08       "version": "0.7.1"
              09       "authors": [
              10           {
              11               "name": "Daniele Alessandri",
              12               "email": "suppakilla@gmail.com",
              13               "homepage": "http://clorophilla.net"
              14           }
              15       ],
              16       "require": {
              17           "php": ">=5.3.0"
              18       },
              19       "autoload": {
              20           "psr-0": {"Predis": "lib/"}
              21       }
              22 }
              Note: Package Definition === Application/Root Package




Jordi Boggiano                                                                        Company nelm.io
Twitter @seldaek                                                                          Blog seld.be
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
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
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
Alternative Repositories
              01 "repositories": [
              02     {
              03         "type": "composer",
              04         "url": "http://example.org"
              05     },
              06     {
              07         "type": "vcs",
              08         "url": "git://example.org/MyRepo.git"
              09     },
              10     {
              11         "type": "pear",
              12         "url": "http://pear.example.org"
              13     },
              14     {
              15         "packagist": false
              16     }
              17 ]
              Composer Repository Implementations ($url/packages.json)
                 Packagist
                 Satis
                 (Pirum)




Jordi Boggiano                                                           Company nelm.io
Twitter @seldaek                                                             Blog seld.be
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
State of the Project




Jordi Boggiano                            Company nelm.io
Twitter @seldaek                              Blog seld.be
Dependency Management with Composer
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
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
Wishful Thinking
Look around.
                   Write small libs.
                      Share code.
                    Reuse things.
                   Reinvigorate PHP


Jordi Boggiano                         Company nelm.io
Twitter @seldaek                           Blog seld.be
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
Thank you.




Jordi Boggiano                  Company nelm.io
Twitter @seldaek                    Blog seld.be
Questions?
                      jordi@nelm.io
                         @seldaek
                      slides.seld.be

                        Feedback:
                   http://joind.in/6051

Jordi Boggiano                            Company nelm.io
Twitter @seldaek                              Blog seld.be

More Related Content

PDF
Composer the right way - SunshinePHP
Rafael Dohms
 
PPTX
PHP Dependency Management with Composer
Adam Englander
 
PDF
Dependency management with Composer
Jason Grimes
 
PDF
Composer for Busy Developers - php|tek13
Rafael Dohms
 
PPT
Composer - Package Management for PHP. Silver Bullet?
Kirill Chebunin
 
PPTX
Composer | PHP Dependency Manager
Ujjwal Ojha
 
ODP
Vagrant move over, here is Docker
Nick Belhomme
 
Composer the right way - SunshinePHP
Rafael Dohms
 
PHP Dependency Management with Composer
Adam Englander
 
Dependency management with Composer
Jason Grimes
 
Composer for Busy Developers - php|tek13
Rafael Dohms
 
Composer - Package Management for PHP. Silver Bullet?
Kirill Chebunin
 
Composer | PHP Dependency Manager
Ujjwal Ojha
 
Vagrant move over, here is Docker
Nick Belhomme
 

What's hot (20)

PPTX
Composer for Magento 1.x and Magento 2
Sergii Shymko
 
PDF
Composer the Right Way - PHPBNL16
Rafael Dohms
 
PDF
Composer The Right Way - 010PHP
Rafael Dohms
 
PDF
Php Dependency Management with Composer ZendCon 2016
Clark Everetts
 
PDF
Create your own composer package
Lattapon Yodsuwan
 
ODP
PHP Quality Assurance Workshop PHPBenelux
Nick Belhomme
 
PDF
Composer The Right Way #PHPjhb15
Rafael Dohms
 
PDF
Deploying Symfony | symfony.cat
Pablo Godel
 
PDF
Composer The Right Way
Rafael Dohms
 
PDF
Composer the right way
Rafael Dohms
 
PDF
Composer the right way - DPC15
Rafael Dohms
 
PDF
Composer the Right Way - MM16NL
Rafael Dohms
 
PDF
Composer the right way [SweetlakePHP]
Rafael Dohms
 
PDF
Composer the Right Way - PHPSRB16
Rafael Dohms
 
PDF
Composer the right way - NomadPHP
Rafael Dohms
 
PDF
Composer The Right Way - PHPUGMRN
Rafael Dohms
 
PPTX
Python at Facebook
Angelo Failla
 
PPTX
Web backends development using Python
Ayun Park
 
ODP
Servlet 3.1 Async I/O
Simone Bordet
 
PPTX
Phalcon 2 - PHP Brazil Conference
Jackson F. de A. Mafra
 
Composer for Magento 1.x and Magento 2
Sergii Shymko
 
Composer the Right Way - PHPBNL16
Rafael Dohms
 
Composer The Right Way - 010PHP
Rafael Dohms
 
Php Dependency Management with Composer ZendCon 2016
Clark Everetts
 
Create your own composer package
Lattapon Yodsuwan
 
PHP Quality Assurance Workshop PHPBenelux
Nick Belhomme
 
Composer The Right Way #PHPjhb15
Rafael Dohms
 
Deploying Symfony | symfony.cat
Pablo Godel
 
Composer The Right Way
Rafael Dohms
 
Composer the right way
Rafael Dohms
 
Composer the right way - DPC15
Rafael Dohms
 
Composer the Right Way - MM16NL
Rafael Dohms
 
Composer the right way [SweetlakePHP]
Rafael Dohms
 
Composer the Right Way - PHPSRB16
Rafael Dohms
 
Composer the right way - NomadPHP
Rafael Dohms
 
Composer The Right Way - PHPUGMRN
Rafael Dohms
 
Python at Facebook
Angelo Failla
 
Web backends development using Python
Ayun Park
 
Servlet 3.1 Async I/O
Simone Bordet
 
Phalcon 2 - PHP Brazil Conference
Jackson F. de A. Mafra
 
Ad

Viewers also liked (18)

PDF
CRISE - INSTITUT 2012 - Brian Mishara - Enjeux et dĂŠfis en prĂŠvention du suic...
Centre de recherche et d'intervention sur le suicide, enjeux ĂŠthiques et pratiques de fin de vie
 
PPT
Why Towels
Dana Zezzo, CAS
 
PPT
Trabajo carol sql
Carolina Morales
 
PDF
Whitepaper the mobile-commerce-impact
Vengat Owen
 
PDF
Solution cz
Liza Alypova
 
PPTX
Nolahouse
carcin
 
PPTX
Lgelectronics 110912130948-phpapp02
Rizwan Ahmad
 
PPTX
Paypersocials
waltersorrells
 
PDF
Cmmaao action-pmi-pmp
vishvasyadav45
 
PDF
Những tác phẩm điêu khắc ngoài trời thú vị
Carysil Vietnam
 
DOCX
Task 2
monicacadenaf
 
PPTX
Drupal usage by example : World Food Programme
Adyax
 
DOCX
J O B S I
keydiva
 
PPTX
Общественный контроль за полицией в Волгодонске
Vadim Karastelev
 
PPTX
Image ideas
shannonldayres
 
PPT
Bloemen
MoensM
 
PDF
Паски Dual system
Liza Alypova
 
PPS
Esculturas de Areia
Forgon Forgon
 
CRISE - INSTITUT 2012 - Brian Mishara - Enjeux et dĂŠfis en prĂŠvention du suic...
Centre de recherche et d'intervention sur le suicide, enjeux ĂŠthiques et pratiques de fin de vie
 
Why Towels
Dana Zezzo, CAS
 
Trabajo carol sql
Carolina Morales
 
Whitepaper the mobile-commerce-impact
Vengat Owen
 
Solution cz
Liza Alypova
 
Nolahouse
carcin
 
Lgelectronics 110912130948-phpapp02
Rizwan Ahmad
 
Paypersocials
waltersorrells
 
Cmmaao action-pmi-pmp
vishvasyadav45
 
Những tác phẩm điêu khắc ngoài trời thú vị
Carysil Vietnam
 
Task 2
monicacadenaf
 
Drupal usage by example : World Food Programme
Adyax
 
J O B S I
keydiva
 
Общественный контроль за полицией в Волгодонске
Vadim Karastelev
 
Image ideas
shannonldayres
 
Bloemen
MoensM
 
Паски Dual system
Liza Alypova
 
Esculturas de Areia
Forgon Forgon
 
Ad

Similar to Dependency Management with Composer (20)

PDF
PHP Reset
Jordi Boggiano
 
PDF
international PHP2011_Jordi Boggiano_PHP Reset
smueller_sandsmedia
 
PDF
Composer (PHP Usergroup Karlsruhe)
Nils Adermann
 
PDF
Introduction to symfony2
Pablo Godel
 
PDF
Composer: putting dependencies on the score
Rafael Dohms
 
PDF
Composer, putting dependencies on the score
Rafael Dohms
 
PDF
Create a PHP Library the right way
Christian Varela
 
PDF
Welcome to the Symfony2 World - FOSDEM 2013
Lukas Smith
 
PDF
Composing Project Dependencies
Derek Gallo
 
PDF
Silex: From nothing to an API
chrisdkemper
 
PDF
Composer for busy developers - DPC13
Rafael Dohms
 
PDF
Symfony2: Get your project started
Ryan Weaver
 
KEY
Composer
Tom Corrigan
 
PDF
WordCamp Sacramento 2019: Modernizing Your Development Workflow Using Composer
Jeremy Ward
 
PDF
composer_talk_20160209
Bradley Wogsland
 
PDF
12 Composer #burningkeyboards
Denis Ristic
 
PDF
Composer Helpdesk
Sven Rautenberg
 
PDF
An Introduction to the Laravel Framework (AFUP Forum PHP 2014)
daylerees
 
PDF
Symony2 A Next Generation PHP Framework
Ryan Weaver
 
PDF
Symfony - Introduction
Piers Warmers
 
PHP Reset
Jordi Boggiano
 
international PHP2011_Jordi Boggiano_PHP Reset
smueller_sandsmedia
 
Composer (PHP Usergroup Karlsruhe)
Nils Adermann
 
Introduction to symfony2
Pablo Godel
 
Composer: putting dependencies on the score
Rafael Dohms
 
Composer, putting dependencies on the score
Rafael Dohms
 
Create a PHP Library the right way
Christian Varela
 
Welcome to the Symfony2 World - FOSDEM 2013
Lukas Smith
 
Composing Project Dependencies
Derek Gallo
 
Silex: From nothing to an API
chrisdkemper
 
Composer for busy developers - DPC13
Rafael Dohms
 
Symfony2: Get your project started
Ryan Weaver
 
Composer
Tom Corrigan
 
WordCamp Sacramento 2019: Modernizing Your Development Workflow Using Composer
Jeremy Ward
 
composer_talk_20160209
Bradley Wogsland
 
12 Composer #burningkeyboards
Denis Ristic
 
Composer Helpdesk
Sven Rautenberg
 
An Introduction to the Laravel Framework (AFUP Forum PHP 2014)
daylerees
 
Symony2 A Next Generation PHP Framework
Ryan Weaver
 
Symfony - Introduction
Piers Warmers
 

Recently uploaded (20)

PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PDF
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
PDF
GDG Cloud Munich - Intro - Luiz Carneiro - #BuildWithAI - July - Abdel.pdf
Luiz Carneiro
 
PDF
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
PDF
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PPTX
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
PDF
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
PPTX
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
PDF
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PDF
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
PDF
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
PPTX
Simple and concise overview about Quantum computing..pptx
mughal641
 
PDF
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
PDF
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
PDF
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
GDG Cloud Munich - Intro - Luiz Carneiro - #BuildWithAI - July - Abdel.pdf
Luiz Carneiro
 
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
Simple and concise overview about Quantum computing..pptx
mughal641
 
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 

Dependency Management with Composer

  • 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
  • 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
  • 15. Using a Composed Project 01 vendor/ 02 .composer/ 03 bin/ 04 pimple/ 05 pimple/ 06 predis/ 07 predis/ 08 service-provider/ 09 silex/ 10 silex/ 11 symfony/ 12 browser-kit/ 13 class-loader/ 14 css-selector/ 15 dom-crawler/ 16 event-dispatcher/ 17 finder/ 18 http-foundation/ 19 http-kernel/ 20 routing/ 21 twig/ 22 twig/ Jordi Boggiano Company nelm.io Twitter @seldaek Blog seld.be
  • 16. Downloading Project Dependencies composer.json Located in project root directory Defines dependencies 1 { 2 "require": { 3 "silex/silex": ">=1.0.0-dev", 4 "symfony/finder": "2.1-dev", 5 "twig/twig": "1.*", 6 "predis/service-provider": "dev-master" 7 } 8 } Source install: With install --prefer-source it clones/checks out the code. Jordi Boggiano Company nelm.io Twitter @seldaek Blog seld.be
  • 17. Creating a Package Definition 01 { 02 "name": "predis/predis", 03 "type": "library", 04 "description": "Flexible and feature-complete Redis client", 05 "keywords": ["nosql", "redis", "predis"], 06 "homepage": "http://github.com/nrk/predis", 07 "license": "MIT", 08 "version": "0.7.1" 09 "authors": [ 10 { 11 "name": "Daniele Alessandri", 12 "email": "[email protected]", 13 "homepage": "http://clorophilla.net" 14 } 15 ], 16 "require": { 17 "php": ">=5.3.0" 18 }, 19 "autoload": { 20 "psr-0": {"Predis": "lib/"} 21 } 22 } Note: Package Definition === Application/Root Package 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
  • 21. Alternative Repositories 01 "repositories": [ 02 { 03 "type": "composer", 04 "url": "http://example.org" 05 }, 06 { 07 "type": "vcs", 08 "url": "git://example.org/MyRepo.git" 09 }, 10 { 11 "type": "pear", 12 "url": "http://pear.example.org" 13 }, 14 { 15 "packagist": false 16 } 17 ] Composer Repository Implementations ($url/packages.json) Packagist Satis (Pirum) 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
  • 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
  • 30. Thank you. Jordi Boggiano Company nelm.io Twitter @seldaek Blog seld.be
  • 31. Questions? [email protected] @seldaek slides.seld.be Feedback: http://joind.in/6051 Jordi Boggiano Company nelm.io Twitter @seldaek Blog seld.be