• Save
Composer for busy developers - DPC13
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Composer for busy developers - DPC13

on

  • 3,790 views

Managing dependencies and third-party code in PHP applications is a daily challenge, keeping everyone on the same versions during development and at deploy time a struggle. Meet Composer a tool ...

Managing dependencies and third-party code in PHP applications is a daily challenge, keeping everyone on the same versions during development and at deploy time a struggle. Meet Composer a tool designed to help you maintain a consistent set of dependencies as well as share and discover new libraries. Let's see how you can use this tool in your Applications and Libraries to wrangle your dependencies with a simple json configuration file and a command line interface.

Statistics

Views

Total Views
3,790
Views on SlideShare
3,656
Embed Views
134

Actions

Likes
14
Downloads
0
Comments
0

5 Embeds 134

http://blog.jetbrains.com 87
http://eventifier.co 36
https://twitter.com 7
http://eventifier.com 3
http://librosweb.es 1

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Composer for busy developers - DPC13 Presentation Transcript

  • 1. C!"p#$rPutting your dependencies on the scoreRafael Dohms / @rdohms
  • 2. photocredit:EliWhiteEvangelist, Speaker andContributor.Developer at WEBclusive.Enabler at AmsterdamPHP.Rafael Dohms@rdohms
  • 3. photocredit:EliWhiteEvangelist, Speaker andContributor.Developer at WEBclusive.Enabler at AmsterdamPHP.Rafael Dohms@rdohms
  • 4. %$ E&$v(!r P)(*+a general introduction to ComposerEv$r,-, *!"p#)./the basic stuff you need to knowUp/r-)./ (! M$0(r!advanced features for more complex scenarios1.-)./ ,!2r (2.$discovering and sharing libraries
  • 5. %$ E&$v(!r P)(*+
  • 6. per project system widecentral repositoryopen acceptancespread out channelsstrict standards
  • 7. I need my team and my deployments touse consistent versions of thedependencies of my project
  • 8. The Evolution of Vendor Management
  • 9. copy & paste
  • 10. copy & pastePEAR
  • 11. copy & pasteSVN ExternalsPEAR
  • 12. copy & pasteSVN ExternalsGit SubmodulesPEAR
  • 13. copy & pasteSymfony2vendor scriptSVN ExternalsGit SubmodulesPEAR
  • 14. copy & pasteSymfony2vendor scriptSVN ExternalsGit SubmodulesPEARComposer!
  • 15. A per-project dependencymanager that allows you todeclare a consistent list ofdependencies and versions foryour application, as well as aconsistent way of sharing yourlibraries and making themdiscoverable usingpackagist.org
  • 16. Ev$r,-, C!"p#)./
  • 17. I.0(&&)./ C!"p#$r$ curl -s http://getcomposer.org/installer | php$ curl -s http://getcomposer.org/installer | php -- --install-dir=binLocal (embed)Global
  • 18. I.0(&&)./ C!"p#$r$ curl -s http://getcomposer.org/installer | php$ curl -s http://getcomposer.org/installer | php -- --install-dir=binLocal (embed)Global$ ln -s /usr/bin/composer.phar /usr/bin/composer3p:
  • 19. I.0(&&)./ C!"p#$r
  • 20. I.0(&&)./ C!"p#$r$ composer.phar --versionComposer version 7073d38
  • 21. I.0(&&)./ C!"p#$r$ composer.phar --versionComposer version 7073d38php
  • 22. K$$p )( 2p-($-!
  • 23. K$$p )( 2p-($-!$ composer.phar self-updateUpdating to version 7073d38.Downloading: 100%
  • 24. I’" b2)&-)./ Pr!4$*(How can composer manage your dependencies
  • 25. C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0
  • 26. C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0$ cd ~/dev/myproject
  • 27. C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0$ cd ~/dev/myproject$ vim composer.json{"require": {"silex/silex": "~1.0"}}
  • 28. C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0$ cd ~/dev/myproject$ vim composer.json{"require": {"silex/silex": "~1.0"}}put this in your project root
  • 29. C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0$ cd ~/dev/myproject$ vim composer.json{"require": {"silex/silex": "~1.0"}}put this in your project root“require”: required packages andversionsadv. ex.: >=1.0.0,<1.2-dev or ~1.1
  • 30. C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0$ cd ~/dev/myproject$ vim composer.json{"require": {"silex/silex": "~1.0"}}put this in your project root“require”: required packages andversionsadv. ex.: >=1.0.0,<1.2-dev or ~1.1
  • 31. C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0$ cd ~/dev/myproject$ vim composer.json$ composer.phar install{"require": {"silex/silex": "~1.0"}}put this in your project root“require”: required packages andversionsadv. ex.: >=1.0.0,<1.2-dev or ~1.1
  • 32. Loading composer repositories with package informationInstalling dependencies- Installing psr/log (1.0.0)Loading from cache- Installing symfony/routing (v2.2.1)Downloading: 100%- Installing symfony/http-foundation (v2.2.1)Downloading: 100%- Installing symfony/event-dispatcher (v2.2.1)Loading from cache- Installing symfony/http-kernel (v2.2.1)Downloading: 100%- Installing pimple/pimple (v1.0.2)Downloading: 100%- Installing silex/silex (v1.0.0)Downloading: 100%symfony/routing suggests installing symfony/config (2.2.*)symfony/routing suggests installing symfony/yaml (2.2.*)[...]silex/silex suggests installing symfony/dom-crawler (>=2.1,<2.4-dev)silex/silex suggests installing symfony/form (>= 2.1.4,<2.4-dev)Writing lock fileGenerating autoload files
  • 33. Loading composer repositories with package informationInstalling dependencies- Installing psr/log (1.0.0)Loading from cache- Installing symfony/routing (v2.2.1)Downloading: 100%- Installing symfony/http-foundation (v2.2.1)Downloading: 100%- Installing symfony/event-dispatcher (v2.2.1)Loading from cache- Installing symfony/http-kernel (v2.2.1)Downloading: 100%- Installing pimple/pimple (v1.0.2)Downloading: 100%- Installing silex/silex (v1.0.0)Downloading: 100%symfony/routing suggests installing symfony/config (2.2.*)symfony/routing suggests installing symfony/yaml (2.2.*)[...]silex/silex suggests installing symfony/dom-crawler (>=2.1,<2.4-dev)silex/silex suggests installing symfony/form (>= 2.1.4,<2.4-dev)Writing lock fileGenerating autoload filesyour dependency’sdependencies
  • 34. Loading composer repositories with package informationInstalling dependencies- Installing psr/log (1.0.0)Loading from cache- Installing symfony/routing (v2.2.1)Downloading: 100%- Installing symfony/http-foundation (v2.2.1)Downloading: 100%- Installing symfony/event-dispatcher (v2.2.1)Loading from cache- Installing symfony/http-kernel (v2.2.1)Downloading: 100%- Installing pimple/pimple (v1.0.2)Downloading: 100%- Installing silex/silex (v1.0.0)Downloading: 100%symfony/routing suggests installing symfony/config (2.2.*)symfony/routing suggests installing symfony/yaml (2.2.*)[...]silex/silex suggests installing symfony/dom-crawler (>=2.1,<2.4-dev)silex/silex suggests installing symfony/form (>= 2.1.4,<2.4-dev)Writing lock fileGenerating autoload filesyour dependencyyour dependency’sdependencies
  • 35. Loading composer repositories with package informationInstalling dependencies- Installing psr/log (1.0.0)Loading from cache- Installing symfony/routing (v2.2.1)Downloading: 100%- Installing symfony/http-foundation (v2.2.1)Downloading: 100%- Installing symfony/event-dispatcher (v2.2.1)Loading from cache- Installing symfony/http-kernel (v2.2.1)Downloading: 100%- Installing pimple/pimple (v1.0.2)Downloading: 100%- Installing silex/silex (v1.0.0)Downloading: 100%symfony/routing suggests installing symfony/config (2.2.*)symfony/routing suggests installing symfony/yaml (2.2.*)[...]silex/silex suggests installing symfony/dom-crawler (>=2.1,<2.4-dev)silex/silex suggests installing symfony/form (>= 2.1.4,<2.4-dev)Writing lock fileGenerating autoload filesyour dependencyyour dependency’sdependenciessuggestions of otherpackages, for furtherfeatures
  • 36. “~1.0”V$r0)!.)./G$( (+$ -!(0 ). r!w“>=1.0”“>=1.0, <=1.1”“1.0.*”
  • 37. “~1.0”V$r0)!.)./G$( (+$ -!(0 ). r!w“>=1.0”“>=1.0, <=1.1”“1.0.*”>=1.0, <2.0: BC Compatible releases
  • 38. V$r0)!.)./: D$vG$(()./ 0(b&$ !r -$v v$r0)!.0
  • 39. V$r0)!.)./: D$vG$(()./ 0(b&$ !r -$v v$r0)!.0“minimum-stability”: “stable”
  • 40. V$r0)!.)./: D$vG$(()./ 0(b&$ !r -$v v$r0)!.0“minimum-stability”: “stable”No dev versions in dependency tree
  • 41. V$r0)!.)./: D$vG$(()./ 0(b&$ !r -$v v$r0)!.0“minimum-stability”: “stable”No dev versions in dependency tree“dms/dms”: “1.0.0@dev”
  • 42. V$r0)!.)./: D$vG$(()./ 0(b&$ !r -$v v$r0)!.0“minimum-stability”: “stable”No dev versions in dependency tree“dms/dms”: “1.0.0@dev”Allow this package to use unstable versions
  • 43. Q2)*5! I +v$ . )-$!B!#(rpp)./ Pr!4$*(0
  • 44. Q2)*5! I +v$ . )-$!B!#(rpp)./ Pr!4$*(0$ composer.phar create-project fabpot/silex-skeleton ~/dev/myproject
  • 45. Q2)*5! I +v$ . )-$!B!#(rpp)./ Pr!4$*(0$ composer.phar create-project fabpot/silex-skeleton ~/dev/myprojectInstalling fabpot/silex-skeleton (v1.0.0)- Installing fabpot/silex-skeleton (v1.0.0)Downloading: 100%Created project in projectLoading composer repositories with package informationInstalling dependencies- Installing pimple/pimple (dev-master)Cloning d2cfa2f02f50abef65c238747c753a5f6786f6be[...]symfony/routing suggests installing symfony/yaml (dev-master)[...]Writing lock fileGenerating autoload files
  • 46. Q2)*5! I +v$ . )-$!B!#(rpp)./ Pr!4$*(0$ composer.phar create-project fabpot/silex-skeleton ~/dev/myprojectInstalling fabpot/silex-skeleton (v1.0.0)- Installing fabpot/silex-skeleton (v1.0.0)Downloading: 100%Created project in projectLoading composer repositories with package informationInstalling dependencies- Installing pimple/pimple (dev-master)Cloning d2cfa2f02f50abef65c238747c753a5f6786f6be[...]symfony/routing suggests installing symfony/yaml (dev-master)[...]Writing lock fileGenerating autoload filesmyproject/composer.jsoncomposer.lockconfig/console/src/templates/vendor/web/
  • 47. A--)./ .$w R$q2)r$"$.(0$ composer.phar require symfony/yaml=~2.1.0
  • 48. A--)./ .$w R$q2)r$"$.(0$ composer.phar require symfony/yaml=~2.1.0composer.json has been updatedLoading composer repositories with package informationUpdating dependencies- Installing symfony/yaml (v2.1.8)Downloading: 100%Writing lock fileGenerating autoload files
  • 49. H!w -! I 6.-/&!- (+$ 6&$0?PSR-0 and the modern autoloader
  • 50. Composer generates anautoload file for all yourdependencies
  • 51. Composer generates anautoload file for all yourdependenciesvendor/autoload.php
  • 52. "autoload": {    "psr-0": { "MyNamespace": "<root>" },"classmap": ["src/", "lib/", "Something.php"],"files": ["src/MyLibrary/functions.php"]},
  • 53. "autoload": {    "psr-0": { "MyNamespace": "<root>" },"classmap": ["src/", "lib/", "Something.php"],"files": ["src/MyLibrary/functions.php"]},“autoload”: describes the autoloading needed for your library
  • 54. "autoload": {    "psr-0": { "MyNamespace": "<root>" },"classmap": ["src/", "lib/", "Something.php"],"files": ["src/MyLibrary/functions.php"]},“autoload”: describes the autoloading needed for your library“psr-0”: PSR-0 Compatible libraries
  • 55. "autoload": {    "psr-0": { "MyNamespace": "<root>" },"classmap": ["src/", "lib/", "Something.php"],"files": ["src/MyLibrary/functions.php"]},“autoload”: describes the autoloading needed for your library“classmap”: Old PEAR packages and otherlibraries“psr-0”: PSR-0 Compatible libraries
  • 56. "autoload": {    "psr-0": { "MyNamespace": "<root>" },"classmap": ["src/", "lib/", "Something.php"],"files": ["src/MyLibrary/functions.php"]},“autoload”: describes the autoloading needed for your library“classmap”: Old PEAR packages and otherlibraries“files”: for php functions or initializations“psr-0”: PSR-0 Compatible libraries
  • 57. I .$$- ,!2r 0$rv$r (! +v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0
  • 58. {"require": {"php": ">=5.3.3","ext-ldap": "*"}}I .$$- ,!2r 0$rv$r (! +v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0
  • 59. {"require": {"php": ">=5.3.3","ext-ldap": "*"}}“php”: PHP version.I .$$- ,!2r 0$rv$r (! +v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0
  • 60. {"require": {"php": ">=5.3.3","ext-ldap": "*"}}“php”: PHP version.“ext-*”: Presence of selectedextensionI .$$- ,!2r 0$rv$r (! +v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0
  • 61. I’" 0*r$- !f @/r"p7r!/r""$r.. 0! I wr)($ ($0(0
  • 62.     "require-dev": {        "phpunit/phpunit": "~3.7"    },I’" 0*r$- !f @/r"p7r!/r""$r.. 0! I wr)($ ($0(0
  • 63.     "require-dev": {        "phpunit/phpunit": "~3.7"    },“require-dev”: only needed if you are going tocontribute/develop the library or appI’" 0*r$- !f @/r"p7r!/r""$r.. 0! I wr)($ ($0(0
  • 64.     "require-dev": {        "phpunit/phpunit": "~3.7"    },“require-dev”: only needed if you are going tocontribute/develop the library or app$ composer.phar require --dev phpunit/phpunit: ~3.7I’" 0*r$- !f @/r"p7r!/r""$r.. 0! I wr)($ ($0(0
  • 65.     "require-dev": {        "phpunit/phpunit": "~3.7"    },“require-dev”: only needed if you are going tocontribute/develop the library or app$ composer.phar require --dev phpunit/phpunit: ~3.7I’" 0*r$- !f @/r"p7r!/r""$r.. 0! I wr)($ ($0(0only required in development
  • 66. I.0(&&)./, 2p-()./ .- "!v)./ !.how does Composer guarantee consistency
  • 67. composer.json
  • 68. “composer.json”: metadata and list of yourdependencies.composer.json
  • 69. “composer.json”: metadata and list of yourdependencies.composer.lockcomposer.json
  • 70. “composer.json”: metadata and list of yourdependencies.“composer.lock”: existing dependencies andcurrent commit hashes.composer.lockcomposer.json
  • 71. composer.lockcomposer.json
  • 72. updatecomposer.lockcomposer.json
  • 73. update installcomposer.lockcomposer.json
  • 74. update installreadscomposer.lockcomposer.json
  • 75. update installreadsgets latestcomposer.lockcomposer.json
  • 76. update installreadsgets latestwritescomposer.lockcomposer.json
  • 77. update installreadsgets latestwritesreadscomposer.lockcomposer.json
  • 78. update installreadsgets latestwritesreadscomparescomposer.lockcomposer.json
  • 79. update installreadsgets latestwritesreadsgets locked versioncomparescomposer.lockcomposer.json
  • 80. K$$p (+$ ($" !. (+$ 0"$ p/$Commit you composer.lock fileinto the repository, and usecomposer install.
  • 81. D$p&!,)./ (! Pr!-2*()!.?
  • 82. D$p&!,)./ (! Pr!-2*()!.?--no-dev
  • 83. D$p&!,)./ (! Pr!-2*()!.?--no-dev--prefer-dist
  • 84. D$p&!,)./ (! Pr!-2*()!.?--no-dev--prefer-dist--optimize-autoloader
  • 85. I’" -$v$&!p)./ &)brr,, +$&p!how can composer spread my library around?
  • 86. {"name": "vendor-namespace/package-name","type": "symfony-bundle","description": "A sample package for examples","keywords": ["php", "package"],"homepage": "http://doh.ms","license": "MIT","support": {"email": "support@mylib.com","issues": "http://issues.lib.com"}"target-dir": "/folder/to/install",}
  • 87. {"name": "vendor-namespace/package-name","type": "symfony-bundle","description": "A sample package for examples","keywords": ["php", "package"],"homepage": "http://doh.ms","license": "MIT","support": {"email": "support@mylib.com","issues": "http://issues.lib.com"}"target-dir": "/folder/to/install",}“name”: this should be unique, pick agood one!
  • 88. {"name": "vendor-namespace/package-name","type": "symfony-bundle","description": "A sample package for examples","keywords": ["php", "package"],"homepage": "http://doh.ms","license": "MIT","support": {"email": "support@mylib.com","issues": "http://issues.lib.com"}"target-dir": "/folder/to/install",}“name”: this should be unique, pick agood one!“type”: will be used for moreadvanced “custom”installs
  • 89. {"name": "vendor-namespace/package-name","type": "symfony-bundle","description": "A sample package for examples","keywords": ["php", "package"],"homepage": "http://doh.ms","license": "MIT","support": {"email": "support@mylib.com","issues": "http://issues.lib.com"}"target-dir": "/folder/to/install",}“name”: this should be unique, pick agood one!“type”: will be used for moreadvanced “custom”installs“license”: very important!
  • 90. {"name": "vendor-namespace/package-name","type": "symfony-bundle","description": "A sample package for examples","keywords": ["php", "package"],"homepage": "http://doh.ms","license": "MIT","support": {"email": "support@mylib.com","issues": "http://issues.lib.com"}"target-dir": "/folder/to/install",}“name”: this should be unique, pick agood one!“type”: will be used for moreadvanced “custom”installs“license”: very important!“support”: point people the rightway.
  • 91. {"name": "vendor-namespace/package-name","type": "symfony-bundle","description": "A sample package for examples","keywords": ["php", "package"],"homepage": "http://doh.ms","license": "MIT","support": {"email": "support@mylib.com","issues": "http://issues.lib.com"}"target-dir": "/folder/to/install",}“name”: this should be unique, pick agood one!“type”: will be used for moreadvanced “custom”installs“license”: very important!“support”: point people the rightway.“target-dir”: great for installing sub-dir splits repositoriesex: Symfony Bundles: /Acme/Bundle/MyBundle
  • 92. Q2)*5! I w.. p(*+ (+)0!B!!(0(rpp)./ L)brr, C!.(r)b2()!.
  • 93. $ composer.phar create-project dms/dms --dev ~/dev/oss/dmsQ2)*5! I w.. p(*+ (+)0!B!!(0(rpp)./ L)brr, C!.(r)b2()!.
  • 94. $ composer.phar create-project dms/dms --dev ~/dev/oss/dmsQ2)*5! I w.. p(*+ (+)0!B!!(0(rpp)./ L)brr, C!.(r)b2()!.is now default
  • 95. T/ ,!2r r$&$0$0!use semver and always make tags for releases
  • 96. T/ ,!2r r$&$0$0!use semver and always make tags for releasesX.Y.Z
  • 97. Up/r-)./ (! M$0(r!
  • 98. B2( I .$$- 0p$*)6* v$r0)!.version modifiers to the rescue!
  • 99. "acme/foo": "1.0.x-dev#3ebbe75"
  • 100. "acme/foo": "1.0.x-dev#3ebbe75"“#<ref>”: Get this specific commit
  • 101. "acme/foo": "1.0.x-dev#3ebbe75""acme/foo": "@dev""acme/foo": "1.0.*@beta"“#<ref>”: Get this specific commit
  • 102. "acme/foo": "1.0.x-dev#3ebbe75""acme/foo": "@dev""acme/foo": "1.0.*@beta"“#<ref>”: Get this specific commit“@<state>”: Get a version outsideyour default stability
  • 103. I .$$- (! 8$*2($ f$w 0*r)p(0how to automate tasks with Composer
  • 104.     "scripts": {        "post-install-cmd": [            "Sensio...ComposerScriptHandler::buildBootstrap",            "Sensio...ComposerScriptHandler::clearCache",            "Sensio...ComposerScriptHandler::installAssets",            "Sensio...ComposerScriptHandler::installRequirementsFile"        ],        "post-update-cmd": [            "Sensio...ComposerScriptHandler::buildBootstrap",            "Sensio...ComposerScriptHandler::clearCache",            "Sensio...ComposerScriptHandler::installAssets",            "Sensio...ComposerScriptHandler::installRequirementsFile"        ]    },
  • 105.     "scripts": {        "post-install-cmd": [            "Sensio...ComposerScriptHandler::buildBootstrap",            "Sensio...ComposerScriptHandler::clearCache",            "Sensio...ComposerScriptHandler::installAssets",            "Sensio...ComposerScriptHandler::installRequirementsFile"        ],        "post-update-cmd": [            "Sensio...ComposerScriptHandler::buildBootstrap",            "Sensio...ComposerScriptHandler::clearCache",            "Sensio...ComposerScriptHandler::installAssets",            "Sensio...ComposerScriptHandler::installRequirementsFile"        ]    },“scripts”: allows you to run scripts at givenmoments
  • 106. C20(!" R$p#)(!r)$0 !r .!C!"p#$r, w+( .!w?Injecting Composer into wild packages
  • 107. “hero/superpackage”: “dev-master”
  • 108. “hero/superpackage”: “dev-master”
  • 109. “hero/superpackage”: “dev-master”
  • 110. “hero/superpackage”: “dev-master”
  • 111. “hero/superpackage”: “dev-master”    "repositories": [{"type": "vcs","url": "https://github.com/rdohms/hero-superpackage"}       ]
  • 112. “hero/superpackage”: “dev-master”    "repositories": [{"type": "vcs","url": "https://github.com/rdohms/hero-superpackage"}       ]my fork
  • 113. “hero/superpackage”: “dev-master”    "repositories": [{"type": "vcs","url": "https://github.com/rdohms/hero-superpackage"}       ]“repositories”: point to non-indexed,override existing or on-the-fly packagesmy fork
  • 114. {"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"},"source": {"url": "http://smarty-php.googlecode.com/svn/","type": "svn","reference": "tags/Smarty_3_1_7/distribution/"}}}]}N!.-C!"p#$r P*5/$
  • 115. {"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"},"source": {"url": "http://smarty-php.googlecode.com/svn/","type": "svn","reference": "tags/Smarty_3_1_7/distribution/"}}}]}“package”: on-the-fly package, injecting acomposer.jsonN!.-C!"p#$r P*5/$
  • 116. {"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"},"source": {"url": "http://smarty-php.googlecode.com/svn/","type": "svn","reference": "tags/Smarty_3_1_7/distribution/"}}}]}SVN / Git“package”: on-the-fly package, injecting acomposer.jsonN!.-C!"p#$r P*5/$
  • 117. I .$$- (+)0 PEAR p*5/$...No Problem!
  • 118. {"repositories": [{"type": "pear","url": "http://pear2.php.net"}],"require": {"pear-pear2.php.net/PEAR2_Text_Markdown": "*","pear-pear2/PEAR2_HTTP_Request": "*"}}
  • 119. {"repositories": [{"type": "pear","url": "http://pear2.php.net"}],"require": {"pear-pear2.php.net/PEAR2_Text_Markdown": "*","pear-pear2/PEAR2_HTTP_Request": "*"}}“pear”: official PEAR and custom PEARchannels
  • 120. {"repositories": [{"type": "pear","url": "http://pear2.php.net"}],"require": {"pear-pear2.php.net/PEAR2_Text_Markdown": "*","pear-pear2/PEAR2_HTTP_Request": "*"}}“pear”: official PEAR and custom PEARchannelsRemember the prefix!
  • 121. {"repositories": [{"type": "pear","url": "http://pear2.php.net"}],"require": {"pear-pear2.php.net/PEAR2_Text_Markdown": "*","pear-pear2/PEAR2_HTTP_Request": "*"}}“pear”: official PEAR and custom PEARchannelsRemember the prefix!Warning: PEAR causes a overhead of requests!!
  • 122. 1.-)./ ,!2r (2.$
  • 123. I .$$- &)brr, (+( -!$0..Let me get that for you
  • 124. http://packagist.org/
  • 125. versionspackage infousage info
  • 126. $ composer.phar search filter
  • 127. dms/dms-filter-bundle : DMS Filter Bundle, makes Annotationbased ...lexik/form-filter-bundle : This bundle aim to provide classes tobuild...rollerworks/recordfilter-bundle : Record search-filtering bundle forSymfonybrikou/zend_filter : Zend Framework Filter Libraryext-filter : The filter PHP extensiondms/dms-filter : DMS Library, includes various bundlesand ...shtumi/useful-bundle : Symfony ShtumiUsefulBundle$ composer.phar search filter
  • 128. $ composer.phar show dms/dms-filter-bundle
  • 129. name : dms/dms-filter-bundledescrip. : DMS Filter Bundle, makes Annotation based entity filteringavailable in Symfonykeywords : symfony, bundle, filter, dmsversions : dev-master, v1.1.1, v1.1, 1.0.2, 1.0.1, 1.0.0type : symfony-bundlelicense : MITsource : [git] https://github.com/rdohms/DMSFilterBundle v1.1.1dist : [zip] https://github.com/rdohms/DMSFilterBundle/zipball/v1.1.1 v1.1.1names : dms/dms-filter-bundleautoloadpsr-0DMSBundleFilterBundle => .requiresphp >=5.3.2dms/dms-filter >=1.0.2$ composer.phar show dms/dms-filter-bundle
  • 130. B2( ", r$p#)(!r, )0 pr)v($!Get your own package repository
  • 131. S()0!
  • 132. $ composer.phar create-project composer/satisR!&&!2( ,!2r !w. S()0
  • 133. $ composer.phar create-project composer/satis$ vi packages.json{"name": "My Repository","homepage": "http://packages.example.org","repositories": [{ "type": "vcs", "url": "http://github.com/mycompany/privaterepo" },{ "type": "vcs", "url": "http://svn.example.org/private/repo" },{ "type": "vcs", "url": "http://github.com/mycompany/privaterepo2" }],"require-all": true}R!&&!2( ,!2r !w. S()0
  • 134. $ composer.phar create-project composer/satis$ vi packages.json$ php bin/satis build config.json web/{"name": "My Repository","homepage": "http://packages.example.org","repositories": [{ "type": "vcs", "url": "http://github.com/mycompany/privaterepo" },{ "type": "vcs", "url": "http://svn.example.org/private/repo" },{ "type": "vcs", "url": "http://github.com/mycompany/privaterepo2" }],"require-all": true}R!&&!2( ,!2r !w. S()0
  • 135. {"repositories": [{"type": "composer","url": "http://packages.yourdomain.net"}],“require”: {“myvendor/mypackage”: “dev-master”}}U0)./ ,!2r !w. S()0
  • 136. {"repositories": [{"type": "composer","url": "http://packages.yourdomain.net"}],“require”: {“myvendor/mypackage”: “dev-master”}}U0)./ ,!2r !w. S()0“composer”: use this just like it wasPackagist
  • 137. W+$r$ 0+!2&- I /$( +$&p?http://getcomposer.org#composer on irc.freenode.org
  • 138. %$ E&$v(!r P)(*+Dependency Manager, consistent versions, per-projectEv$r,-, *!"p#)./install, update, lock and autoloadUp/r-)./ (! M$0(r!post-install, overriding, PEAR integration, developer environment1.-)./ ,!2r (2.$Satis and Packagist
  • 139. %.5 Y!2!http://slides.doh.mshttp://doh.ms@rdohmshttps://joind.in/8464