Composer for Busy Developers - php|tek13
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
8,499
On Slideshare
8,264
From Embeds
235
Number of Embeds
4

Actions

Shares
Downloads
43
Comments
2
Likes
12

Embeds 235

https://twitter.com 119
http://jandbeyond.org 74
http://blog.jetbrains.com 35
http://librosweb.es 7

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

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. Pr!b&$":I need my team and my deployments to use consistentversions of the dependencies of my project
  • 8. Pr!b&$":I need my team and my deployments to use consistentversions of the dependencies of my projectS!&2()!.:
  • 9. Pr!b&$":I need my team and my deployments to use consistentversions of the dependencies of my projectS!&2()!.:PEAR
  • 10. Pr!b&$":I need my team and my deployments to use consistentversions of the dependencies of my projectS!&2()!.:PEARSVN Externals
  • 11. Pr!b&$":I need my team and my deployments to use consistentversions of the dependencies of my projectS!&2()!.:PEARSVN ExternalsGit Submodules
  • 12. Pr!b&$":I need my team and my deployments to use consistentversions of the dependencies of my projectS!&2()!.:PEARSVN ExternalsGit Submodulesvendor management script
  • 13. Pr!b&$":I need my team and my deployments to use consistentversions of the dependencies of my projectS!&2()!.:PEARSVN ExternalsGit Submodulesvendor management scriptC!"p#$r!
  • 14. 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
  • 15. Ev$r,-, C!"p#)./
  • 16. I.0(&&)./ C!"p#$r$ curl -s http://getcomposer.org/installer | php$ curl -s http://getcomposer.org/installer | php -- --install-dir=binLocal (embed)Global
  • 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$ ln -s /usr/bin/composer.phar /usr/bin/composer3p:
  • 18. I.0(&&)./ C!"p#$r
  • 19. I.0(&&)./ C!"p#$r$ composer.phar --versionComposer version 7073d38
  • 20. I.0(&&)./ C!"p#$r$ composer.phar --versionComposer version 7073d38php
  • 21. K$$p )( 2p-($-!
  • 22. K$$p )( 2p-($-!$ composer.phar self-updateUpdating to version 7073d38.Downloading: 100%
  • 23. I’" b2)&-)./ Pr!4$*(How can composer manage your dependencies
  • 24. C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0
  • 25. C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0$ cd ~/dev/myproject
  • 26. C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0$ cd ~/dev/myproject$ vim composer.json{"require": {"silex/silex": "~1.0"}}
  • 27. C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0$ cd ~/dev/myproject$ vim composer.json{"require": {"silex/silex": "~1.0"}}put this in your project root
  • 28. 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
  • 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$ 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
  • 31. 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
  • 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 filesyour dependency’sdependencies
  • 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 dependencyyour 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’sdependenciessuggestions of otherpackages, for furtherfeatures
  • 35. “~1.0”V$r0)!.)./G$( (+$ -!(0 ). r!w“>=1.0”“>=1.0, <=1.1”“1.0.*”
  • 36. “~1.0”V$r0)!.)./G$( (+$ -!(0 ). r!w“>=1.0”“>=1.0, <=1.1”“1.0.*”>=1.0, <=2.0: BC Compatible releases
  • 37. V$r0)!.)./: D$vG$(()./ 0(b&$ !r -$v v$r0)!.0
  • 38. V$r0)!.)./: D$vG$(()./ 0(b&$ !r -$v v$r0)!.0“minimum-stability”: “stable”
  • 39. V$r0)!.)./: D$vG$(()./ 0(b&$ !r -$v v$r0)!.0“minimum-stability”: “stable”No dev versions in dependency tree
  • 40. 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”
  • 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”Allow this package to use unstable versions
  • 42. Q2)*5! I +v$ . )-$!B!#(rpp)./ Pr!4$*(0
  • 43. Q2)*5! I +v$ . )-$!B!#(rpp)./ Pr!4$*(0$ composer.phar create-project fabpot/silex-skeleton ~/dev/myproject
  • 44. 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
  • 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 filesmyproject/composer.jsoncomposer.lockconfig/console/src/templates/vendor/web/
  • 46. A--)./ .$w R$q2)r$"$.(0$ composer.phar require symfony/yaml=~2.1.0
  • 47. 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
  • 48. H!w -! I 6.-/&!- (+$ 6&$0?PSR-0 and the modern autoloader
  • 49. Composer generates anautoload file for all yourdependencies
  • 50. Composer generates anautoload file for all yourdependenciesvendor/autoload.php
  • 51. "autoload": {    "psr-0": { "MyNamespace": "<root>" },"classmap": ["src/", "lib/", "Something.php"],"files": ["src/MyLibrary/functions.php"]},
  • 52. "autoload": {    "psr-0": { "MyNamespace": "<root>" },"classmap": ["src/", "lib/", "Something.php"],"files": ["src/MyLibrary/functions.php"]},“autoload”: describes the autoloading needed for your library
  • 53. "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
  • 54. "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
  • 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“files”: for php functions or initializations“psr-0”: PSR-0 Compatible libraries
  • 56. I .$$- ,!2r 0$rv$r (! +v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0
  • 57. {"require": {"php": ">=5.3.3","ext-ldap": "*"}}I .$$- ,!2r 0$rv$r (! +v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0
  • 58. {"require": {"php": ">=5.3.3","ext-ldap": "*"}}“php”: PHP version.I .$$- ,!2r 0$rv$r (! +v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0
  • 59. {"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
  • 60. I.0(&&)./, 2p-()./ .- "!v)./ !.how does Composer guarantee consistency
  • 61. composer.json
  • 62. “composer.json”: metadata and list of yourdependencies.composer.json
  • 63. “composer.json”: metadata and list of yourdependencies.composer.lockcomposer.json
  • 64. “composer.json”: metadata and list of yourdependencies.“composer.lock”: existing dependencies andcurrent commit hashes.composer.lockcomposer.json
  • 65. composer.lockcomposer.json
  • 66. updatecomposer.lockcomposer.json
  • 67. update installcomposer.lockcomposer.json
  • 68. update installreadscomposer.lockcomposer.json
  • 69. update installreadsgets latestcomposer.lockcomposer.json
  • 70. update installreadsgets latestwritescomposer.lockcomposer.json
  • 71. update installreadsgets latestwritesreadscomposer.lockcomposer.json
  • 72. update installreadsgets latestwritesreadscomparescomposer.lockcomposer.json
  • 73. update installreadsgets latestwritesreadsgets locked versioncomparescomposer.lockcomposer.json
  • 74. K$$p (+$ ($" !. (+$ 0"$ p/$Commit you composer.lock fileinto the repository, and usecomposer install.
  • 75. I’" -$v$&!p)./ &)brr,, +$&p!how can composer spread my library around?
  • 76. {"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",}
  • 77. {"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!
  • 78. {"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
  • 79. {"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!
  • 80. {"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.
  • 81. {"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
  • 82. Q2)*5! I w.. p(*+ (+)0!B!!(0(rpp)./ L)brr, C!.(r)b2()!.
  • 83. $ composer.phar create-project dms/dms --dev ~/dev/oss/dmsQ2)*5! I w.. p(*+ (+)0!B!!(0(rpp)./ L)brr, C!.(r)b2()!.
  • 84. $ composer.phar create-project dms/dms --dev ~/dev/oss/dmsQ2)*5! I w.. p(*+ (+)0!B!!(0(rpp)./ L)brr, C!.(r)b2()!.gimme dev packages
  • 85. $ composer.phar create-project dms/dms --dev ~/dev/oss/dmsQ2)*5! I w.. p(*+ (+)0!B!!(0(rpp)./ L)brr, C!.(r)b2()!.gimme dev packages    "require-dev": {        "symfony/symfony": ">=2.1-dev",        "doctrine/orm": "dev-master"    },
  • 86. $ composer.phar create-project dms/dms --dev ~/dev/oss/dmsQ2)*5! I w.. p(*+ (+)0!B!!(0(rpp)./ L)brr, C!.(r)b2()!.gimme dev packages    "require-dev": {        "symfony/symfony": ">=2.1-dev",        "doctrine/orm": "dev-master"    },“require-dev”: only needed if you aregoing to contribute/develop the library
  • 87. T/ ,!2r r$&$0$0!use semver and always make tags for releases
  • 88. T/ ,!2r r$&$0$0!use semver and always make tags for releasesX.Y.Z
  • 89. Up/r-)./ (! M$0(r!
  • 90. B2( I .$$- 0p$*)6* v$r0)!.version modifiers to the rescue!
  • 91. "acme/foo": "1.0.x-dev#3ebbe75"
  • 92. "acme/foo": "1.0.x-dev#3ebbe75"“#<ref>”: Get this specific commit
  • 93. "acme/foo": "1.0.x-dev#3ebbe75""acme/foo": "@dev""acme/foo": "1.0.*@beta"“#<ref>”: Get this specific commit
  • 94. "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
  • 95. I .$$- (! 7$*2($ f$w 0*r)p(0how to automate tasks with Composer
  • 96.     "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"        ]    },
  • 97.     "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
  • 98. C20(!" R$p#)(!r)$0 !r .!C!"p#$r, w+( .!w?Injecting Composer into wild packages
  • 99. “hero/superpackage”: “dev-master”
  • 100. “hero/superpackage”: “dev-master”
  • 101. “hero/superpackage”: “dev-master”
  • 102. “hero/superpackage”: “dev-master”
  • 103. “hero/superpackage”: “dev-master”    "repositories": [{"type": "vcs","url": "https://github.com/rdohms/hero-superpackage"}       ]
  • 104. “hero/superpackage”: “dev-master”    "repositories": [{"type": "vcs","url": "https://github.com/rdohms/hero-superpackage"}       ]my fork
  • 105. “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
  • 106. {"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/$
  • 107. {"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/$
  • 108. {"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/$
  • 109. I .$$- (+)0 PEAR p*5/$...No Problem!
  • 110. {"repositories": [{"type": "pear","url": "http://pear2.php.net"}],"require": {"pear-pear2.php.net/PEAR2_Text_Markdown": "*","pear-pear2/PEAR2_HTTP_Request": "*"}}
  • 111. {"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
  • 112. {"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!
  • 113. {"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!!
  • 114. 1.-)./ ,!2r (2.$
  • 115. I .$$- &)brr, (+( -!$0..Let me get that for you
  • 116. http://packagist.org/
  • 117. versionspackage infousage info
  • 118. $ composer.phar search filter
  • 119. 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
  • 120. $ composer.phar show dms/dms-filter-bundle
  • 121. 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
  • 122. B2( ", r$p#)(!r, )0 pr)v($!Get your own package repository
  • 123. S()0!
  • 124. $ composer.phar create-project composer/satisR!""!#$ %!#r !w& S$()
  • 125. $ 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!""!#$ %!#r !w& S$()
  • 126. $ 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!""!#$ %!#r !w& S$()
  • 127. {"repositories": [{"type": "composer","url": "http://packages.yourdomain.net"}],“require”: {“myvendor/mypackage”: “dev-master”}}U)(&* %!#r !w& S$()
  • 128. {"repositories": [{"type": "composer","url": "http://packages.yourdomain.net"}],“require”: {“myvendor/mypackage”: “dev-master”}}U)(&* %!#r !w& S$()“composer”: use this just like it wasPackagist
  • 129. W+$r$ 0+!2&- I /$( +$&p?http://getcomposer.org#composer on irc.freenode.org
  • 130. %$ 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
  • 131. Q2$0()!.0?http://slides.doh.mshttp://doh.ms@rdohmshttps://joind.in/8178