YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

Transcript
Page 1: Composer: putting dependencies on the score

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

Rafael Dohms / @rdohms

Page 2: Composer: putting dependencies on the score

phot

o cr

edit:

Eli W

hite

Evangelist, Speaker and Contributor.

Developer at WEBclusive.

Enabler at AmsterdamPHP.

Rafael Dohms@rdohms

Page 3: Composer: putting dependencies on the score

%$ 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 4: Composer: putting dependencies on the score

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

Page 5: Composer: putting dependencies on the score

per project system wide

central repository

open acceptance

spread out channels

strict standards

Page 6: Composer: putting dependencies on the score

Pr!b&$":

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

Page 7: Composer: putting dependencies on the score

Pr!b&$":

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

S!&2()!.:

Page 8: Composer: putting dependencies on the score

Pr!b&$":

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

S!&2()!.:PEAR

Page 9: Composer: putting dependencies on the score

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 10: Composer: putting dependencies on the score

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 11: Composer: putting dependencies on the score

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 12: Composer: putting dependencies on the score

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 13: Composer: putting dependencies on the score

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 14: Composer: putting dependencies on the score

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

Page 15: Composer: putting dependencies on the score

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 16: Composer: putting dependencies on the score

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 17: Composer: putting dependencies on the score

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

Page 18: Composer: putting dependencies on the score

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

$ composer.phar --version

Composer version 6573fd3

Page 19: Composer: putting dependencies on the score

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

$ composer.phar --version

Composer version 6573fd3

php

Page 20: Composer: putting dependencies on the score

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

Page 21: Composer: putting dependencies on the score

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

$ composer.phar self-update

Updating to version 65e95ed. Downloading: 100%

Page 22: Composer: putting dependencies on the score

C!"p#$r 101

Page 23: Composer: putting dependencies on the score

C!"p#$r 101

$ cd ~/dev/myproject

Page 24: Composer: putting dependencies on the score

C!"p#$r 101

$ cd ~/dev/myproject

$ vim composer.json

{ "require": { "silex/silex": "1.0.*" }, "minimum-stability": "dev"}

Page 25: Composer: putting dependencies on the score

C!"p#$r 101

$ cd ~/dev/myproject

$ vim composer.json

{ "require": { "silex/silex": "1.0.*" }, "minimum-stability": "dev"}

note: project root

Page 26: Composer: putting dependencies on the score

C!"p#$r 101

$ cd ~/dev/myproject

$ vim composer.json

{ "require": { "silex/silex": "1.0.*" }, "minimum-stability": "dev"}

note: project root

“require”: required packages and versions

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

Page 27: Composer: putting dependencies on the score

C!"p#$r 101

$ cd ~/dev/myproject

$ vim composer.json

{ "require": { "silex/silex": "1.0.*" }, "minimum-stability": "dev"}

note: project root

“require”: required packages and versions

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

“minimum-stability”: if you only want stable packages

default: stable

Page 28: Composer: putting dependencies on the score

C!"p#$r 101

$ cd ~/dev/myproject

$ vim composer.json

$ composer.phar install

{ "require": { "silex/silex": "1.0.*" }, "minimum-stability": "dev"}

note: project root

“require”: required packages and versions

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

“minimum-stability”: if you only want stable packages

default: stable

Page 29: Composer: putting dependencies on the score

Installing dependencies - Installing pimple/pimple (dev-master) Cloning d2cfa2f02f50abef65c238747c753a5f6786f6be

- Installing symfony/routing (dev-master) Cloning 6bca82c3ea0d42d750de4f49b22020dfd047dc0f

- Installing symfony/http-foundation (dev-master) Cloning 498c2da9c3fecefc7e3b0add73621f3feb337ddd

- Installing symfony/event-dispatcher (dev-master) Cloning b99b49760016467099f010aff7a5098861d49e09

- Installing symfony/http-kernel (dev-master) Cloning 7f671472f009231f9c1f5ec9b81fc6fbfcd9a955

- Installing silex/silex (dev-master) Cloning 18e248a277adb061602d2bcabe96011db1c76ec0

symfony/routing suggests installing symfony/config (dev-master)symfony/routing suggests installing symfony/yaml (dev-master)symfony/routing suggests installing doctrine/common (>=2.2,<2.4-dev)symfony/event-dispatcher suggests installing symfony/dependency-injection (dev-master)symfony/http-kernel suggests installing symfony/browser-kit (dev-master)symfony/http-kernel suggests installing symfony/class-loader (dev-master)symfony/http-kernel suggests installing symfony/config (dev-master)symfony/http-kernel suggests installing symfony/console (dev-master)symfony/http-kernel suggests installing symfony/dependency-injection (dev-master)symfony/http-kernel suggests installing symfony/finder (dev-master)silex/silex suggests installing symfony/browser-kit (2.1.*)silex/silex suggests installing symfony/css-selector (2.1.*)silex/silex suggests installing symfony/dom-crawler (2.1.*)Writing lock fileGenerating autoload files

Page 30: Composer: putting dependencies on the score

Installing dependencies - Installing pimple/pimple (dev-master) Cloning d2cfa2f02f50abef65c238747c753a5f6786f6be

- Installing symfony/routing (dev-master) Cloning 6bca82c3ea0d42d750de4f49b22020dfd047dc0f

- Installing symfony/http-foundation (dev-master) Cloning 498c2da9c3fecefc7e3b0add73621f3feb337ddd

- Installing symfony/event-dispatcher (dev-master) Cloning b99b49760016467099f010aff7a5098861d49e09

- Installing symfony/http-kernel (dev-master) Cloning 7f671472f009231f9c1f5ec9b81fc6fbfcd9a955

- Installing silex/silex (dev-master) Cloning 18e248a277adb061602d2bcabe96011db1c76ec0

symfony/routing suggests installing symfony/config (dev-master)symfony/routing suggests installing symfony/yaml (dev-master)symfony/routing suggests installing doctrine/common (>=2.2,<2.4-dev)symfony/event-dispatcher suggests installing symfony/dependency-injection (dev-master)symfony/http-kernel suggests installing symfony/browser-kit (dev-master)symfony/http-kernel suggests installing symfony/class-loader (dev-master)symfony/http-kernel suggests installing symfony/config (dev-master)symfony/http-kernel suggests installing symfony/console (dev-master)symfony/http-kernel suggests installing symfony/dependency-injection (dev-master)symfony/http-kernel suggests installing symfony/finder (dev-master)silex/silex suggests installing symfony/browser-kit (2.1.*)silex/silex suggests installing symfony/css-selector (2.1.*)silex/silex suggests installing symfony/dom-crawler (2.1.*)Writing lock fileGenerating autoload files

your dependency’s dependencies

Page 31: Composer: putting dependencies on the score

Installing dependencies - Installing pimple/pimple (dev-master) Cloning d2cfa2f02f50abef65c238747c753a5f6786f6be

- Installing symfony/routing (dev-master) Cloning 6bca82c3ea0d42d750de4f49b22020dfd047dc0f

- Installing symfony/http-foundation (dev-master) Cloning 498c2da9c3fecefc7e3b0add73621f3feb337ddd

- Installing symfony/event-dispatcher (dev-master) Cloning b99b49760016467099f010aff7a5098861d49e09

- Installing symfony/http-kernel (dev-master) Cloning 7f671472f009231f9c1f5ec9b81fc6fbfcd9a955

- Installing silex/silex (dev-master) Cloning 18e248a277adb061602d2bcabe96011db1c76ec0

symfony/routing suggests installing symfony/config (dev-master)symfony/routing suggests installing symfony/yaml (dev-master)symfony/routing suggests installing doctrine/common (>=2.2,<2.4-dev)symfony/event-dispatcher suggests installing symfony/dependency-injection (dev-master)symfony/http-kernel suggests installing symfony/browser-kit (dev-master)symfony/http-kernel suggests installing symfony/class-loader (dev-master)symfony/http-kernel suggests installing symfony/config (dev-master)symfony/http-kernel suggests installing symfony/console (dev-master)symfony/http-kernel suggests installing symfony/dependency-injection (dev-master)symfony/http-kernel suggests installing symfony/finder (dev-master)silex/silex suggests installing symfony/browser-kit (2.1.*)silex/silex suggests installing symfony/css-selector (2.1.*)silex/silex suggests installing symfony/dom-crawler (2.1.*)Writing lock fileGenerating autoload files

your dependency

your dependency’s dependencies

Page 32: Composer: putting dependencies on the score

Installing dependencies - Installing pimple/pimple (dev-master) Cloning d2cfa2f02f50abef65c238747c753a5f6786f6be

- Installing symfony/routing (dev-master) Cloning 6bca82c3ea0d42d750de4f49b22020dfd047dc0f

- Installing symfony/http-foundation (dev-master) Cloning 498c2da9c3fecefc7e3b0add73621f3feb337ddd

- Installing symfony/event-dispatcher (dev-master) Cloning b99b49760016467099f010aff7a5098861d49e09

- Installing symfony/http-kernel (dev-master) Cloning 7f671472f009231f9c1f5ec9b81fc6fbfcd9a955

- Installing silex/silex (dev-master) Cloning 18e248a277adb061602d2bcabe96011db1c76ec0

symfony/routing suggests installing symfony/config (dev-master)symfony/routing suggests installing symfony/yaml (dev-master)symfony/routing suggests installing doctrine/common (>=2.2,<2.4-dev)symfony/event-dispatcher suggests installing symfony/dependency-injection (dev-master)symfony/http-kernel suggests installing symfony/browser-kit (dev-master)symfony/http-kernel suggests installing symfony/class-loader (dev-master)symfony/http-kernel suggests installing symfony/config (dev-master)symfony/http-kernel suggests installing symfony/console (dev-master)symfony/http-kernel suggests installing symfony/dependency-injection (dev-master)symfony/http-kernel suggests installing symfony/finder (dev-master)silex/silex suggests installing symfony/browser-kit (2.1.*)silex/silex suggests installing symfony/css-selector (2.1.*)silex/silex suggests installing symfony/dom-crawler (2.1.*)Writing lock fileGenerating autoload files

your dependency

your dependency’s dependencies

suggestions of other packages, for further features

Page 33: Composer: putting dependencies on the score

P)*42p (+$ ($"p!!Let Composer bootstrap you development

Page 34: Composer: putting dependencies on the score

B!!(0(r'pp)./ Pr!5$*(0

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

Page 35: Composer: putting dependencies on the score

B!!(0(r'pp)./ Pr!5$*(0

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

Installing fabpot/silex-skeleton (dev-master cc19d406cf3cac253715db92d400992d4f3e1b52) - Installing fabpot/silex-skeleton (dev-master) Cloning master

Created project in one-liner/Installing dependencies - Installing pimple/pimple (dev-master) Cloning d2cfa2f02f50abef65c238747c753a5f6786f6be

[...]

symfony/routing suggests installing symfony/yaml (dev-master)[...]

Writing lock fileGenerating autoload files

Page 36: Composer: putting dependencies on the score

B!!(0(r'pp)./ Pr!5$*(0

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

Installing fabpot/silex-skeleton (dev-master cc19d406cf3cac253715db92d400992d4f3e1b52) - Installing fabpot/silex-skeleton (dev-master) Cloning master

Created project in one-liner/Installing 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 37: Composer: putting dependencies on the score

I w'.( (! *!.(r)b2($ ' pr!5$*(Composer can set that up for you.

Page 38: Composer: putting dependencies on the score

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

B!!(0(r'pp)./ C!.(r)b2()!.0

Page 39: Composer: putting dependencies on the score

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

B!!(0(r'pp)./ C!.(r)b2()!.0

gimme dev packages

Page 40: Composer: putting dependencies on the score

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

B!!(0(r'pp)./ C!.(r)b2()!.0

gimme dev packages

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

Page 41: Composer: putting dependencies on the score

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

B!!(0(r'pp)./ C!.(r)b2()!.0

gimme dev packages

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

“require-dev”: only needed if you are going to contribute

Page 42: Composer: putting dependencies on the score

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

Page 43: Composer: putting dependencies on the score

Composer generates an autoload file for all your

dependencies

Page 44: Composer: putting dependencies on the score

Composer generates an autoload file for all your

dependencies

vendor/autoload.php

Page 45: Composer: putting dependencies on the score

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

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

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

},

Page 46: Composer: putting dependencies on the score

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

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

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

},

“autoload”: describes the autoloading needed for your library

Page 47: Composer: putting dependencies on the score

"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 48: Composer: putting dependencies on the score

"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 49: Composer: putting dependencies on the score

"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 50: Composer: putting dependencies on the score

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

Page 51: Composer: putting dependencies on the score
Page 52: Composer: putting dependencies on the score

composer.json

Page 53: Composer: putting dependencies on the score

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

composer.json

Page 54: Composer: putting dependencies on the score

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

composer.lock

composer.json

Page 55: Composer: putting dependencies on the score

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

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

composer.lock

composer.json

Page 56: Composer: putting dependencies on the score

composer.lock

composer.json

Page 57: Composer: putting dependencies on the score

update

composer.lock

composer.json

Page 58: Composer: putting dependencies on the score

update install

composer.lock

composer.json

Page 59: Composer: putting dependencies on the score

update install

reads

composer.lock

composer.json

Page 60: Composer: putting dependencies on the score

update install

reads

gets latest

composer.lock

composer.json

Page 61: Composer: putting dependencies on the score

update install

reads

gets latest

writescomposer.lock

composer.json

Page 62: Composer: putting dependencies on the score

update install

reads

gets latest

writes

reads

composer.lock

composer.json

Page 63: Composer: putting dependencies on the score

update install

reads

gets latest

writes

reads

compares

composer.lock

composer.json

Page 64: Composer: putting dependencies on the score

update install

reads

gets latest

writes

reads

gets locked version

compares

composer.lock

composer.json

Page 65: Composer: putting dependencies on the score

D$v$&!p)./ '. App ). ' ($'"?

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

composer install.

Page 66: Composer: putting dependencies on the score

D$v$&!p)./ '. App ). ' ($'"?

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

composer install.

will ensure everyone is on the same “page”

Page 67: Composer: putting dependencies on the score

I’" -$v$&!p)./ ' &)br'r,, +$&p!here are some fields you should care about

Page 68: Composer: putting dependencies on the score

{ "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 69: Composer: putting dependencies on the score

{ "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 70: Composer: putting dependencies on the score

{ "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 71: Composer: putting dependencies on the score

{ "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 72: Composer: putting dependencies on the score

{ "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 73: Composer: putting dependencies on the score

{ "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 74: Composer: putting dependencies on the score

M, *!-$ )0 PHP 5.4 !.&,!managing system dependencies

Page 75: Composer: putting dependencies on the score

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

Page 76: Composer: putting dependencies on the score

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

“php”: PHP version.

Page 77: Composer: putting dependencies on the score

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

“php”: PHP version.

“ext-*”: Presence of selected extension

Page 78: Composer: putting dependencies on the score

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

Page 79: Composer: putting dependencies on the score

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

Page 80: Composer: putting dependencies on the score
Page 83: Composer: putting dependencies on the score

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

"acme/foo": "@dev"

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

“#<ref>”: Get this specific commit

Page 84: Composer: putting dependencies on the score

"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 85: Composer: putting dependencies on the score

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

Page 86: Composer: putting dependencies on the score

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

Page 87: Composer: putting dependencies on the score

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

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

Page 88: Composer: putting dependencies on the score

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

Injecting Composer into wild packages

Page 89: Composer: putting dependencies on the score

“hero/superpackage”: “dev-master”

Page 90: Composer: putting dependencies on the score

“hero/superpackage”: “dev-master”

Page 91: Composer: putting dependencies on the score

“hero/superpackage”: “dev-master”

Page 92: Composer: putting dependencies on the score

“hero/superpackage”: “dev-master”

Page 93: Composer: putting dependencies on the score

“hero/superpackage”: “dev-master”

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

]

Page 94: Composer: putting dependencies on the score

“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

Page 95: Composer: putting dependencies on the score

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

Page 96: Composer: putting dependencies on the score

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

Page 97: Composer: putting dependencies on the score

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

Page 98: Composer: putting dependencies on the score

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

Page 99: Composer: putting dependencies on the score

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

Page 100: Composer: putting dependencies on the score

{ "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 101: Composer: putting dependencies on the score

{ "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 102: Composer: putting dependencies on the score

{ "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 103: Composer: putting dependencies on the score

replace provide

alias

Page 104: Composer: putting dependencies on the score

replace provide

alias

{ "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } },

"require": { "monolog/monolog": "dev-bugfix as 1.0.x-dev" }}

Page 105: Composer: putting dependencies on the score

replace provide

alias

{ "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } },

"require": { "monolog/monolog": "dev-bugfix as 1.0.x-dev" }}

“replace”: allows you to replace other packages, and be used them in their place.

Page 106: Composer: putting dependencies on the score

replace provide

alias

{ "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } },

"require": { "monolog/monolog": "dev-bugfix as 1.0.x-dev" }}

“replace”: allows you to replace other packages, and be used them in their place.

“provide”: allows you to say a package provides a

expectation.

Page 107: Composer: putting dependencies on the score

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

Page 108: Composer: putting dependencies on the score

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

Page 109: Composer: putting dependencies on the score

http://packagist.org/

Page 110: Composer: putting dependencies on the score

versions

package info

usage info

Page 111: Composer: putting dependencies on the score

$ composer.phar search filter

Page 112: Composer: putting dependencies on the score

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 113: Composer: putting dependencies on the score

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

Page 114: Composer: putting dependencies on the score

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 115: Composer: putting dependencies on the score

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

Page 116: Composer: putting dependencies on the score

S'()0!

Page 117: Composer: putting dependencies on the score

$ composer.phar create-project composer/satis

R!&&!2( ,!2r !w. S'()0

Page 118: Composer: putting dependencies on the score

$ 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

Page 119: Composer: putting dependencies on the score

$ 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

Page 120: Composer: putting dependencies on the score

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

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

U0)./ ,!2r !w. S'()0

Page 121: Composer: putting dependencies on the score

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

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

U0)./ ,!2r !w. S'()0“composer”: use this just like it was Packagist

Page 122: Composer: putting dependencies on the score

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

http://getcomposer.org

#composer on irc.freenode.org

Page 123: Composer: putting dependencies on the score

%$ 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 124: Composer: putting dependencies on the score

Q2$0()!.0?

http://slides.doh.ms

http://doh.ms

@rdohms


Related Documents