composer for busy developers - php|tek13

133
C!"p#$r Putting your dependencies on the score Rafael Dohms / @rdohms

Upload: rafael-dohms

Post on 10-May-2015

9.022 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Composer for Busy Developers - php|tek13

C!"p#$rPutting your dependencies on the score

Rafael Dohms / @rdohms

Page 2: Composer for Busy Developers - php|tek13

phot

o cr

edit:

Eli W

hite

Evangelist, Speaker and Contributor.

Developer at WEBclusive.

Enabler at AmsterdamPHP.

Rafael Dohms@rdohms

Page 3: Composer for Busy Developers - php|tek13

phot

o cr

edit:

Eli W

hite

Evangelist, Speaker and Contributor.

Developer at WEBclusive.

Enabler at AmsterdamPHP.

Rafael Dohms@rdohms

Page 4: Composer for Busy Developers - php|tek13

%$ E&$v'(!r P)(*+a general introduction to Composer

Ev$r,-', *!"p#)./the basic stuff you need to know

Up/r'-)./ (! ' M'$0(r!advanced features for more complex scenarios

1.-)./ ,!2r (2.$discovering and sharing libraries

Page 5: Composer for Busy Developers - php|tek13

%$ E&$v'(!r P)(*+

Page 6: Composer for Busy Developers - php|tek13

per project system wide

central repository

open acceptance

spread out channels

strict standards

Page 7: Composer for Busy Developers - php|tek13

Pr!b&$":

I need my team and my deployments to use consistent versions of the dependencies of my project

Page 8: Composer for Busy Developers - php|tek13

Pr!b&$":

I need my team and my deployments to use consistent versions of the dependencies of my project

S!&2()!.:

Page 9: Composer for Busy Developers - php|tek13

Pr!b&$":

I need my team and my deployments to use consistent versions of the dependencies of my project

S!&2()!.:PEAR

Page 10: Composer for Busy Developers - php|tek13

Pr!b&$":

I need my team and my deployments to use consistent versions of the dependencies of my project

S!&2()!.:PEAR

SVN Externals

Page 11: Composer for Busy Developers - php|tek13

Pr!b&$":

I need my team and my deployments to use consistent versions of the dependencies of my project

S!&2()!.:PEAR

SVN ExternalsGit Submodules

Page 12: Composer for Busy Developers - php|tek13

Pr!b&$":

I need my team and my deployments to use consistent versions of the dependencies of my project

S!&2()!.:PEAR

SVN ExternalsGit Submodules

vendor management script

Page 13: Composer for Busy Developers - php|tek13

Pr!b&$":

I need my team and my deployments to use consistent versions of the dependencies of my project

S!&2()!.:PEAR

SVN ExternalsGit Submodules

vendor management script

C!"p#$r!

Page 14: Composer for Busy Developers - php|tek13

A per-project dependency manager that allows you to declare a consistent list of

dependencies and versions for your application, as well as a

consistent way of sharing your libraries and making them

discoverable using packagist.org

Page 15: Composer for Busy Developers - php|tek13

Ev$r,-', C!"p#)./

Page 16: Composer for Busy Developers - php|tek13

I.0('&&)./ C!"p#$r

$ curl -s http://getcomposer.org/installer | php

$ curl -s http://getcomposer.org/installer | php -- --install-dir=bin

Local (embed)

Global

Page 17: Composer for Busy Developers - php|tek13

I.0('&&)./ C!"p#$r

$ curl -s http://getcomposer.org/installer | php

$ curl -s http://getcomposer.org/installer | php -- --install-dir=bin

Local (embed)

Global

$ ln -s /usr/bin/composer.phar /usr/bin/composer3p:

Page 18: Composer for Busy Developers - php|tek13

I.0('&&)./ C!"p#$r

Page 19: Composer for Busy Developers - php|tek13

I.0('&&)./ C!"p#$r

$ composer.phar --versionComposer version 7073d38

Page 20: Composer for Busy Developers - php|tek13

I.0('&&)./ C!"p#$r

$ composer.phar --versionComposer version 7073d38

php

Page 21: Composer for Busy Developers - php|tek13

K$$p )( 2p-'($-!

Page 22: Composer for Busy Developers - php|tek13

K$$p )( 2p-'($-!

$ composer.phar self-updateUpdating to version 7073d38. Downloading: 100%

Page 23: Composer for Busy Developers - php|tek13

I’" b2)&-)./ ' Pr!4$*(How can composer manage your dependencies

Page 24: Composer for Busy Developers - php|tek13

C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0

Page 25: Composer for Busy Developers - php|tek13

C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0

$ cd ~/dev/myproject

Page 26: Composer for Busy Developers - php|tek13

C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0

$ cd ~/dev/myproject$ vim composer.json

{ "require": { "silex/silex": "~1.0" }}

Page 27: Composer for Busy Developers - php|tek13

C!"p#$r 101G$(()./ (+$ -$p$.-$.*)$0

$ cd ~/dev/myproject$ vim composer.json

{ "require": { "silex/silex": "~1.0" }}

put this in your project root

Page 28: Composer for Busy Developers - php|tek13

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 and versions

adv. ex.: >=1.0.0,<1.2-dev or ~1.1

Page 29: Composer for Busy Developers - php|tek13

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 and versions

adv. ex.: >=1.0.0,<1.2-dev or ~1.1

Page 30: Composer for Busy Developers - php|tek13

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 and versions

adv. ex.: >=1.0.0,<1.2-dev or ~1.1

Page 31: Composer for Busy Developers - php|tek13

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

Page 32: Composer for Busy Developers - php|tek13

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

your dependency’s dependencies

Page 33: Composer for Busy Developers - php|tek13

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

your dependency

your dependency’s dependencies

Page 34: Composer for Busy Developers - php|tek13

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

your dependency

your dependency’s dependencies

suggestions of other packages, for further

features

Page 35: Composer for Busy Developers - php|tek13

“~1.0”

V$r0)!.)./G$( (+$ -!(0 ). ' r!w

“>=1.0”

“>=1.0, <=1.1”

“1.0.*”

Page 36: Composer for Busy Developers - php|tek13

“~1.0”

V$r0)!.)./G$( (+$ -!(0 ). ' r!w

“>=1.0”

“>=1.0, <=1.1”

“1.0.*”

>=1.0, <=2.0: BC Compatible releases

Page 37: Composer for Busy Developers - php|tek13

V$r0)!.)./: D$vG$(()./ 0('b&$ !r -$v v$r0)!.0

Page 38: Composer for Busy Developers - php|tek13

V$r0)!.)./: D$vG$(()./ 0('b&$ !r -$v v$r0)!.0

“minimum-stability”: “stable”

Page 39: Composer for Busy Developers - php|tek13

V$r0)!.)./: D$vG$(()./ 0('b&$ !r -$v v$r0)!.0

“minimum-stability”: “stable”

No dev versions in dependency tree

Page 40: Composer for Busy Developers - php|tek13

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”

Page 41: Composer for Busy Developers - php|tek13

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

Page 42: Composer for Busy Developers - php|tek13

Q2)*5! I +'v$ '. )-$'!B!#(r'pp)./ Pr!4$*(0

Page 43: Composer for Busy Developers - php|tek13

Q2)*5! I +'v$ '. )-$'!B!#(r'pp)./ Pr!4$*(0

$ composer.phar create-project fabpot/silex-skeleton ~/dev/myproject

Page 44: Composer for Busy Developers - php|tek13

Q2)*5! I +'v$ '. )-$'!B!#(r'pp)./ Pr!4$*(0

$ composer.phar create-project fabpot/silex-skeleton ~/dev/myproject

Installing 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

Page 45: Composer for Busy Developers - php|tek13

Q2)*5! I +'v$ '. )-$'!B!#(r'pp)./ Pr!4$*(0

$ composer.phar create-project fabpot/silex-skeleton ~/dev/myproject

Installing 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

myproject/composer.jsoncomposer.lockconfig/console/src/templates/vendor/web/

Page 46: Composer for Busy Developers - php|tek13

A--)./ .$w R$q2)r$"$.(0

$ composer.phar require symfony/yaml=~2.1.0

Page 47: Composer for Busy Developers - php|tek13

A--)./ .$w R$q2)r$"$.(0

$ composer.phar require symfony/yaml=~2.1.0

composer.json has been updatedLoading composer repositories with package informationUpdating dependencies - Installing symfony/yaml (v2.1.8) Downloading: 100%

Writing lock fileGenerating autoload files

Page 48: Composer for Busy Developers - php|tek13

H!w -! I 6.-/&!'- (+$ 6&$0?PSR-0 and the modern autoloader

Page 49: Composer for Busy Developers - php|tek13

Composer generates an autoload file for all your

dependencies

Page 50: Composer for Busy Developers - php|tek13

Composer generates an autoload file for all your

dependencies

vendor/autoload.php

Page 51: Composer for Busy Developers - php|tek13

"autoload": {    "psr-0": { "MyNamespace": "<root>" },

"classmap": ["src/", "lib/", "Something.php"],

"files": ["src/MyLibrary/functions.php"]

},

Page 52: Composer for Busy Developers - php|tek13

"autoload": {    "psr-0": { "MyNamespace": "<root>" },

"classmap": ["src/", "lib/", "Something.php"],

"files": ["src/MyLibrary/functions.php"]

},

“autoload”: describes the autoloading needed for your library

Page 53: Composer for Busy Developers - php|tek13

"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

Page 54: Composer for Busy Developers - php|tek13

"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 other libraries

“psr-0”: PSR-0 Compatible libraries

Page 55: Composer for Busy Developers - php|tek13

"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 other libraries

“files”: for php functions or initializations

“psr-0”: PSR-0 Compatible libraries

Page 56: Composer for Busy Developers - php|tek13

I .$$- ,!2r 0$rv$r (! +'v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0

Page 57: Composer for Busy Developers - php|tek13

{ "require": { "php": ">=5.3.3", "ext-ldap": "*" }}

I .$$- ,!2r 0$rv$r (! +'v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0

Page 58: Composer for Busy Developers - php|tek13

{ "require": { "php": ">=5.3.3", "ext-ldap": "*" }}

“php”: PHP version.

I .$$- ,!2r 0$rv$r (! +'v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0

Page 59: Composer for Busy Developers - php|tek13

{ "require": { "php": ">=5.3.3", "ext-ldap": "*" }}

“php”: PHP version.

“ext-*”: Presence of selected extension

I .$$- ,!2r 0$rv$r (! +'v$ (+$0$..C+$*5)./ 0,0($" -$p$.-$.*)$0

Page 60: Composer for Busy Developers - php|tek13

I.0('&&)./, 2p-'()./ '.- "!v)./ !.how does Composer guarantee consistency

Page 61: Composer for Busy Developers - php|tek13
Page 62: Composer for Busy Developers - php|tek13

composer.json

Page 63: Composer for Busy Developers - php|tek13

“composer.json”: metadata and list of your dependencies.

composer.json

Page 64: Composer for Busy Developers - php|tek13

“composer.json”: metadata and list of your dependencies.

composer.lock

composer.json

Page 65: Composer for Busy Developers - php|tek13

“composer.json”: metadata and list of your dependencies.

“composer.lock”: existing dependencies and current commit hashes.

composer.lock

composer.json

Page 66: Composer for Busy Developers - php|tek13

composer.lock

composer.json

Page 67: Composer for Busy Developers - php|tek13

update

composer.lock

composer.json

Page 68: Composer for Busy Developers - php|tek13

update install

composer.lock

composer.json

Page 69: Composer for Busy Developers - php|tek13

update install

reads

composer.lock

composer.json

Page 70: Composer for Busy Developers - php|tek13

update install

reads

gets latest

composer.lock

composer.json

Page 71: Composer for Busy Developers - php|tek13

update install

reads

gets latest

writescomposer.lock

composer.json

Page 72: Composer for Busy Developers - php|tek13

update install

reads

gets latest

writes

reads

composer.lock

composer.json

Page 73: Composer for Busy Developers - php|tek13

update install

reads

gets latest

writes

reads

compares

composer.lock

composer.json

Page 74: Composer for Busy Developers - php|tek13

update install

reads

gets latest

writes

reads

gets locked version

compares

composer.lock

composer.json

Page 75: Composer for Busy Developers - php|tek13

K$$p (+$ ($'" !. (+$ 0'"$ p'/$

Commit you composer.lock file into the repository, and use

composer install.

Page 76: Composer for Busy Developers - php|tek13

I’" -$v$&!p)./ ' &)br'r,, +$&p!how can composer spread my library around?

Page 77: Composer for Busy Developers - php|tek13

{ "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": "[email protected]", "issues": "http://issues.lib.com" } "target-dir": "/folder/to/install",}

Page 78: Composer for Busy Developers - php|tek13

{ "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": "[email protected]", "issues": "http://issues.lib.com" } "target-dir": "/folder/to/install",}

“name”: this should be unique, pick a good one!

Page 79: Composer for Busy Developers - php|tek13

{ "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": "[email protected]", "issues": "http://issues.lib.com" } "target-dir": "/folder/to/install",}

“name”: this should be unique, pick a good one!

“type”: will be used for more advanced “custom”installs

Page 80: Composer for Busy Developers - php|tek13

{ "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": "[email protected]", "issues": "http://issues.lib.com" } "target-dir": "/folder/to/install",}

“name”: this should be unique, pick a good one!

“type”: will be used for more advanced “custom”installs

“license”: very important!

Page 81: Composer for Busy Developers - php|tek13

{ "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": "[email protected]", "issues": "http://issues.lib.com" } "target-dir": "/folder/to/install",}

“name”: this should be unique, pick a good one!

“type”: will be used for more advanced “custom”installs

“license”: very important!

“support”: point people the right way.

Page 82: Composer for Busy Developers - php|tek13

{ "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": "[email protected]", "issues": "http://issues.lib.com" } "target-dir": "/folder/to/install",}

“name”: this should be unique, pick a good one!

“type”: will be used for more advanced “custom”installs

“license”: very important!

“support”: point people the right way.

“target-dir”: great for installing sub-dir splits repositories

ex: Symfony Bundles: /Acme/Bundle/MyBundle

Page 83: Composer for Busy Developers - php|tek13

Q2)*5! I w'..' p'(*+ (+)0!B!!(0(r'pp)./ L)br'r, C!.(r)b2()!.

Page 84: Composer for Busy Developers - php|tek13

$ composer.phar create-project dms/dms --dev ~/dev/oss/dms

Q2)*5! I w'..' p'(*+ (+)0!B!!(0(r'pp)./ L)br'r, C!.(r)b2()!.

Page 85: Composer for Busy Developers - php|tek13

$ composer.phar create-project dms/dms --dev ~/dev/oss/dms

Q2)*5! I w'..' p'(*+ (+)0!B!!(0(r'pp)./ L)br'r, C!.(r)b2()!.

gimme dev packages

Page 86: Composer for Busy Developers - php|tek13

$ composer.phar create-project dms/dms --dev ~/dev/oss/dms

Q2)*5! I w'..' p'(*+ (+)0!B!!(0(r'pp)./ L)br'r, C!.(r)b2()!.

gimme dev packages

    "require-dev": {        "symfony/symfony": ">=2.1-dev",        "doctrine/orm": "dev-master"    },

Page 87: Composer for Busy Developers - php|tek13

$ composer.phar create-project dms/dms --dev ~/dev/oss/dms

Q2)*5! I w'..' p'(*+ (+)0!B!!(0(r'pp)./ L)br'r, C!.(r)b2()!.

gimme dev packages

    "require-dev": {        "symfony/symfony": ">=2.1-dev",        "doctrine/orm": "dev-master"    },

“require-dev”: only needed if you are going to contribute/develop the library

Page 88: Composer for Busy Developers - php|tek13

T'/ ,!2r r$&$'0$0!use semver and always make tags for releases

Page 89: Composer for Busy Developers - php|tek13

T'/ ,!2r r$&$'0$0!use semver and always make tags for releases

X.Y.Z

Page 90: Composer for Busy Developers - php|tek13

Up/r'-)./ (! ' M'$0(r!

Page 91: Composer for Busy Developers - php|tek13

B2( I .$$- ' 0p$*)6* v$r0)!.version modifiers to the rescue!

Page 92: Composer for Busy Developers - php|tek13
Page 95: Composer for Busy Developers - php|tek13

"acme/foo": "1.0.x-dev#3ebbe75"

"acme/foo": "@dev""acme/foo": "1.0.*@beta"

“#<ref>”: Get this specific commit

Page 96: Composer for Busy Developers - php|tek13

"acme/foo": "1.0.x-dev#3ebbe75"

"acme/foo": "@dev""acme/foo": "1.0.*@beta"

“#<ref>”: Get this specific commit

“@<state>”: Get a version outside your default stability

Page 97: Composer for Busy Developers - php|tek13

I .$$- (! 7$*2($ ' f$w 0*r)p(0how to automate tasks with Composer

Page 98: Composer for Busy Developers - php|tek13

    "scripts": {        "post-install-cmd": [            "Sensio\\...Composer\\ScriptHandler::buildBootstrap",            "Sensio\\...Composer\\ScriptHandler::clearCache",            "Sensio\\...Composer\\ScriptHandler::installAssets",            "Sensio\\...Composer\\ScriptHandler::installRequirementsFile"        ],        "post-update-cmd": [            "Sensio\\...Composer\\ScriptHandler::buildBootstrap",            "Sensio\\...Composer\\ScriptHandler::clearCache",            "Sensio\\...Composer\\ScriptHandler::installAssets",            "Sensio\\...Composer\\ScriptHandler::installRequirementsFile"        ]    },

Page 99: Composer for Busy Developers - php|tek13

    "scripts": {        "post-install-cmd": [            "Sensio\\...Composer\\ScriptHandler::buildBootstrap",            "Sensio\\...Composer\\ScriptHandler::clearCache",            "Sensio\\...Composer\\ScriptHandler::installAssets",            "Sensio\\...Composer\\ScriptHandler::installRequirementsFile"        ],        "post-update-cmd": [            "Sensio\\...Composer\\ScriptHandler::buildBootstrap",            "Sensio\\...Composer\\ScriptHandler::clearCache",            "Sensio\\...Composer\\ScriptHandler::installAssets",            "Sensio\\...Composer\\ScriptHandler::installRequirementsFile"        ]    },

“scripts”: allows you to run scripts at given moments

Page 100: Composer for Busy Developers - php|tek13

C20(!" R$p#)(!r)$0 !r .! C!"p#$r, w+'( .!w?

Injecting Composer into wild packages

Page 101: Composer for Busy Developers - php|tek13

“hero/superpackage”: “dev-master”

Page 102: Composer for Busy Developers - php|tek13

“hero/superpackage”: “dev-master”

Page 103: Composer for Busy Developers - php|tek13

“hero/superpackage”: “dev-master”

Page 104: Composer for Busy Developers - php|tek13

“hero/superpackage”: “dev-master”

Page 105: Composer for Busy Developers - php|tek13

“hero/superpackage”: “dev-master”

    "repositories": [ { "type": "vcs", "url": "https://github.com/rdohms/hero-superpackage" }       

]

Page 106: Composer for Busy Developers - php|tek13

“hero/superpackage”: “dev-master”

    "repositories": [ { "type": "vcs", "url": "https://github.com/rdohms/hero-superpackage" }       

]my fork

Page 107: Composer for Busy Developers - php|tek13

“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 packages

my fork

Page 108: Composer for Busy Developers - php|tek13

{ "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'/$

Page 109: Composer for Busy Developers - php|tek13

{ "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 a composer.json

N!.-C!"p#$r P'*5'/$

Page 110: Composer for Busy Developers - php|tek13

{ "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 a composer.json

N!.-C!"p#$r P'*5'/$

Page 111: Composer for Busy Developers - php|tek13

I .$$- (+)0 PEAR p'*5'/$...No Problem!

Page 112: Composer for Busy Developers - php|tek13

{ "repositories": [ { "type": "pear", "url": "http://pear2.php.net" } ], "require": { "pear-pear2.php.net/PEAR2_Text_Markdown": "*", "pear-pear2/PEAR2_HTTP_Request": "*" }}

Page 113: Composer for Busy Developers - php|tek13

{ "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 PEAR channels

Page 114: Composer for Busy Developers - php|tek13

{ "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 PEAR channels

Remember the prefix!

Page 115: Composer for Busy Developers - php|tek13

{ "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 PEAR channels

Remember the prefix!

Warning: PEAR causes a overhead of requests! !

Page 116: Composer for Busy Developers - php|tek13

1.-)./ ,!2r (2.$

Page 117: Composer for Busy Developers - php|tek13

I .$$- ' &)br'r, (+'( -!$0..Let me get that for you

Page 118: Composer for Busy Developers - php|tek13

http://packagist.org/

Page 119: Composer for Busy Developers - php|tek13

versions

package info

usage info

Page 120: Composer for Busy Developers - php|tek13

$ composer.phar search filter

Page 121: Composer for Busy Developers - php|tek13

dms/dms-filter-bundle : DMS Filter Bundle, makes Annotation based ...lexik/form-filter-bundle : This bundle aim to provide classes to build...rollerworks/recordfilter-bundle : Record search-filtering bundle for Symfonybrikou/zend_filter : Zend Framework Filter Libraryext-filter : The filter PHP extensiondms/dms-filter : DMS Library, includes various bundles and ...shtumi/useful-bundle : Symfony ShtumiUsefulBundle

$ composer.phar search filter

Page 122: Composer for Busy Developers - php|tek13

$ composer.phar show dms/dms-filter-bundle

Page 123: Composer for Busy Developers - php|tek13

name : dms/dms-filter-bundledescrip. : DMS Filter Bundle, makes Annotation based entity filtering available 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-bundle

autoloadpsr-0DMS\Bundle\FilterBundle => .

requiresphp >=5.3.2dms/dms-filter >=1.0.2

$ composer.phar show dms/dms-filter-bundle

Page 124: Composer for Busy Developers - php|tek13

B2( ", r$p#)(!r, )0 pr)v'($!Get your own package repository

Page 125: Composer for Busy Developers - php|tek13

S'()0!

Page 126: Composer for Busy Developers - php|tek13

$ composer.phar create-project composer/satis

R!""!#$ %!#r !w& S'$()

Page 127: Composer for Busy Developers - php|tek13

$ 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'$()

Page 128: Composer for Busy Developers - php|tek13

$ 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'$()

Page 129: Composer for Busy Developers - php|tek13

{ "repositories": [ { "type": "composer", "url": "http://packages.yourdomain.net" } ],

“require”: { “myvendor/mypackage”: “dev-master” }}

U)(&* %!#r !w& S'$()

Page 130: Composer for Busy Developers - php|tek13

{ "repositories": [ { "type": "composer", "url": "http://packages.yourdomain.net" } ],

“require”: { “myvendor/mypackage”: “dev-master” }}

U)(&* %!#r !w& S'$()“composer”: use this just like it was

Packagist

Page 131: Composer for Busy Developers - php|tek13

W+$r$ 0+!2&- I /$( +$&p?

http://getcomposer.org

#composer on irc.freenode.org

Page 132: Composer for Busy Developers - php|tek13

%$ E&$v'(!r P)(*+Dependency Manager, consistent versions, per-project

Ev$r,-', *!"p#)./install, update, lock and autoload

Up/r'-)./ (! ' M'$0(r!post-install, overriding, PEAR integration, developer environment

1.-)./ ,!2r (2.$Satis and Packagist

Page 133: Composer for Busy Developers - php|tek13

Q2$0()!.0?

http://slides.doh.ms

http://doh.ms

@rdohms

https://joind.in/8178