• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Composer for busy developers - DPC13
 

Composer for busy developers - DPC13

on

  • 3,034 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,034
Views on SlideShare
2,904
Embed Views
130

Actions

Likes
11
Downloads
0
Comments
0

5 Embeds 130

http://blog.jetbrains.com 83
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 Composer for busy developers - DPC13 Presentation Transcript

    • C!"p#$rPutting your dependencies on the scoreRafael Dohms / @rdohms
    • photocredit:EliWhiteEvangelist, Speaker andContributor.Developer at WEBclusive.Enabler at AmsterdamPHP.Rafael Dohms@rdohms
    • photocredit:EliWhiteEvangelist, Speaker andContributor.Developer at WEBclusive.Enabler at AmsterdamPHP.Rafael Dohms@rdohms
    • %$ 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
    • %$ E&$v(!r P)(*+
    • per project system widecentral repositoryopen acceptancespread out channelsstrict standards
    • I need my team and my deployments touse consistent versions of thedependencies of my project
    • The Evolution of Vendor Management
    • copy & paste
    • copy & pastePEAR
    • copy & pasteSVN ExternalsPEAR
    • copy & pasteSVN ExternalsGit SubmodulesPEAR
    • copy & pasteSymfony2vendor scriptSVN ExternalsGit SubmodulesPEAR
    • copy & pasteSymfony2vendor scriptSVN ExternalsGit SubmodulesPEARComposer!
    • 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
    • Ev$r,-, C!"p#)./
    • I.0(&&)./ C!"p#$r$ curl -s http://getcomposer.org/installer | php$ curl -s http://getcomposer.org/installer | php -- --install-dir=binLocal (embed)Global
    • 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:
    • I.0(&&)./ C!"p#$r
    • I.0(&&)./ C!"p#$r$ composer.phar --versionComposer version 7073d38
    • I.0(&&)./ C!"p#$r$ composer.phar --versionComposer version 7073d38php
    • K$$p )( 2p-($-!
    • K$$p )( 2p-($-!$ composer.phar self-updateUpdating to version 7073d38.Downloading: 100%
    • I’" b2)&-)./ Pr!4$*(How can composer manage your dependencies
    • C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0
    • C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0$ cd ~/dev/myproject
    • C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0$ cd ~/dev/myproject$ vim composer.json{"require": {"silex/silex": "~1.0"}}
    • C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0$ cd ~/dev/myproject$ vim composer.json{"require": {"silex/silex": "~1.0"}}put this in your project root
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • “~1.0”V$r0)!.)./G$( (+$ -!(0 ). r!w“>=1.0”“>=1.0, <=1.1”“1.0.*”
    • “~1.0”V$r0)!.)./G$( (+$ -!(0 ). r!w“>=1.0”“>=1.0, <=1.1”“1.0.*”>=1.0, <2.0: BC Compatible releases
    • V$r0)!.)./: D$vG$(()./ 0(b&$ !r -$v v$r0)!.0
    • V$r0)!.)./: D$vG$(()./ 0(b&$ !r -$v v$r0)!.0“minimum-stability”: “stable”
    • V$r0)!.)./: D$vG$(()./ 0(b&$ !r -$v v$r0)!.0“minimum-stability”: “stable”No dev versions in dependency tree
    • 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”
    • 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
    • Q2)*5! I +v$ . )-$!B!#(rpp)./ Pr!4$*(0
    • Q2)*5! I +v$ . )-$!B!#(rpp)./ Pr!4$*(0$ composer.phar create-project fabpot/silex-skeleton ~/dev/myproject
    • 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
    • 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/
    • A--)./ .$w R$q2)r$"$.(0$ composer.phar require symfony/yaml=~2.1.0
    • 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
    • H!w -! I 6.-/&!- (+$ 6&$0?PSR-0 and the modern autoloader
    • Composer generates anautoload file for all yourdependencies
    • Composer generates anautoload file for all yourdependenciesvendor/autoload.php
    • "autoload": {    "psr-0": { "MyNamespace": "<root>" },"classmap": ["src/", "lib/", "Something.php"],"files": ["src/MyLibrary/functions.php"]},
    • "autoload": {    "psr-0": { "MyNamespace": "<root>" },"classmap": ["src/", "lib/", "Something.php"],"files": ["src/MyLibrary/functions.php"]},“autoload”: describes the autoloading needed for your library
    • "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
    • "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
    • "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
    • I .$$- ,!2r 0$rv$r (! +v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0
    • {"require": {"php": ">=5.3.3","ext-ldap": "*"}}I .$$- ,!2r 0$rv$r (! +v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0
    • {"require": {"php": ">=5.3.3","ext-ldap": "*"}}“php”: PHP version.I .$$- ,!2r 0$rv$r (! +v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0
    • {"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
    • I’" 0*r$- !f @/r"p7r!/r""$r.. 0! I wr)($ ($0(0
    •     "require-dev": {        "phpunit/phpunit": "~3.7"    },I’" 0*r$- !f @/r"p7r!/r""$r.. 0! I wr)($ ($0(0
    •     "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
    •     "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
    •     "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
    • I.0(&&)./, 2p-()./ .- "!v)./ !.how does Composer guarantee consistency
    • composer.json
    • “composer.json”: metadata and list of yourdependencies.composer.json
    • “composer.json”: metadata and list of yourdependencies.composer.lockcomposer.json
    • “composer.json”: metadata and list of yourdependencies.“composer.lock”: existing dependencies andcurrent commit hashes.composer.lockcomposer.json
    • composer.lockcomposer.json
    • updatecomposer.lockcomposer.json
    • update installcomposer.lockcomposer.json
    • update installreadscomposer.lockcomposer.json
    • update installreadsgets latestcomposer.lockcomposer.json
    • update installreadsgets latestwritescomposer.lockcomposer.json
    • update installreadsgets latestwritesreadscomposer.lockcomposer.json
    • update installreadsgets latestwritesreadscomparescomposer.lockcomposer.json
    • update installreadsgets latestwritesreadsgets locked versioncomparescomposer.lockcomposer.json
    • K$$p (+$ ($" !. (+$ 0"$ p/$Commit you composer.lock fileinto the repository, and usecomposer install.
    • D$p&!,)./ (! Pr!-2*()!.?
    • D$p&!,)./ (! Pr!-2*()!.?--no-dev
    • D$p&!,)./ (! Pr!-2*()!.?--no-dev--prefer-dist
    • D$p&!,)./ (! Pr!-2*()!.?--no-dev--prefer-dist--optimize-autoloader
    • I’" -$v$&!p)./ &)brr,, +$&p!how can composer spread my library around?
    • {"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": "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!
    • {"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
    • {"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!
    • {"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.
    • {"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
    • Q2)*5! I w.. p(*+ (+)0!B!!(0(rpp)./ L)brr, C!.(r)b2()!.
    • $ composer.phar create-project dms/dms --dev ~/dev/oss/dmsQ2)*5! I w.. p(*+ (+)0!B!!(0(rpp)./ L)brr, C!.(r)b2()!.
    • $ 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
    • T/ ,!2r r$&$0$0!use semver and always make tags for releases
    • T/ ,!2r r$&$0$0!use semver and always make tags for releasesX.Y.Z
    • Up/r-)./ (! M$0(r!
    • B2( I .$$- 0p$*)6* v$r0)!.version modifiers to the rescue!
    • "acme/foo": "1.0.x-dev#3ebbe75"
    • "acme/foo": "1.0.x-dev#3ebbe75"“#<ref>”: Get this specific commit
    • "acme/foo": "1.0.x-dev#3ebbe75""acme/foo": "@dev""acme/foo": "1.0.*@beta"“#<ref>”: Get this specific commit
    • "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
    • I .$$- (! 8$*2($ f$w 0*r)p(0how to automate tasks with Composer
    •     "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": {        "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
    • C20(!" R$p#)(!r)$0 !r .!C!"p#$r, w+( .!w?Injecting Composer into wild packages
    • “hero/superpackage”: “dev-master”
    • “hero/superpackage”: “dev-master”
    • “hero/superpackage”: “dev-master”
    • “hero/superpackage”: “dev-master”
    • “hero/superpackage”: “dev-master”    "repositories": [{"type": "vcs","url": "https://github.com/rdohms/hero-superpackage"}       ]
    • “hero/superpackage”: “dev-master”    "repositories": [{"type": "vcs","url": "https://github.com/rdohms/hero-superpackage"}       ]my fork
    • “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
    • {"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/$
    • {"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/$
    • {"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/$
    • I .$$- (+)0 PEAR p*5/$...No Problem!
    • {"repositories": [{"type": "pear","url": "http://pear2.php.net"}],"require": {"pear-pear2.php.net/PEAR2_Text_Markdown": "*","pear-pear2/PEAR2_HTTP_Request": "*"}}
    • {"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
    • {"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!
    • {"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!!
    • 1.-)./ ,!2r (2.$
    • I .$$- &)brr, (+( -!$0..Let me get that for you
    • http://packagist.org/
    • versionspackage infousage info
    • $ composer.phar search filter
    • 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
    • $ composer.phar show dms/dms-filter-bundle
    • 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
    • B2( ", r$p#)(!r, )0 pr)v($!Get your own package repository
    • S()0!
    • $ composer.phar create-project composer/satisR!&&!2( ,!2r !w. S()0
    • $ 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
    • $ 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
    • {"repositories": [{"type": "composer","url": "http://packages.yourdomain.net"}],“require”: {“myvendor/mypackage”: “dev-master”}}U0)./ ,!2r !w. S()0
    • {"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
    • W+$r$ 0+!2&- I /$( +$&p?http://getcomposer.org#composer on irc.freenode.org
    • %$ 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
    • %.5 Y!2!http://slides.doh.mshttp://doh.ms@rdohmshttps://joind.in/8464