SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
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.
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.
1.
C!"p#$rPutting your dependencies on the score
Rafael Dohms / @rdohms
2.
photocredit:EliWhite
Evangelist, Speaker and
Contributor.
Developer at WEBclusive.
Enabler at AmsterdamPHP.
Rafael Dohms
@rdohms
3.
photocredit:EliWhite
Evangelist, Speaker and
Contributor.
Developer at WEBclusive.
Enabler at AmsterdamPHP.
Rafael Dohms
@rdohms
4.
%$ 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
15.
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
26.
C!"p#$r 101
G$(()./ (+$ -$p$.-$.*)$0
$ cd ~/dev/myproject
27.
C!"p#$r 101
G$(()./ (+$ -$p$.-$.*)$0
$ cd ~/dev/myproject
$ vim composer.json
{
"require": {
"silex/silex": "~1.0"
}
}
28.
C!"p#$r 101
G$(()./ (+$ -$p$.-$.*)$0
$ cd ~/dev/myproject
$ vim composer.json
{
"require": {
"silex/silex": "~1.0"
}
}
put this in your project root
29.
C!"p#$r 101
G$(()./ (+$ -$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
30.
C!"p#$r 101
G$(()./ (+$ -$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
31.
C!"p#$r 101
G$(()./ (+$ -$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
40.
V$r0)!.)./: D$v
G$(()./ 0('b&$ !r -$v v$r0)!.0
“minimum-stability”: “stable”
No dev versions in dependency tree
41.
V$r0)!.)./: D$v
G$(()./ 0('b&$ !r -$v v$r0)!.0
“minimum-stability”: “stable”
No dev versions in dependency tree
“dms/dms”: “1.0.0@dev”
42.
V$r0)!.)./: D$v
G$(()./ 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
53.
"autoload": {
"psr-0": { "MyNamespace": "<root>" },
"classmap": ["src/", "lib/", "Something.php"],
"files": ["src/MyLibrary/functions.php"]
},
“autoload”: describes the autoloading needed for your library
54.
"autoload": {
"psr-0": { "MyNamespace": "<root>" },
"classmap": ["src/", "lib/", "Something.php"],
"files": ["src/MyLibrary/functions.php"]
},
“autoload”: describes the autoloading needed for your library
“psr-0”: PSR-0 Compatible libraries
55.
"autoload": {
"psr-0": { "MyNamespace": "<root>" },
"classmap": ["src/", "lib/", "Something.php"],
"files": ["src/MyLibrary/functions.php"]
},
“autoload”: describes the autoloading needed for your library
“classmap”: Old PEAR packages and other
libraries
“psr-0”: PSR-0 Compatible libraries
56.
"autoload": {
"psr-0": { "MyNamespace": "<root>" },
"classmap": ["src/", "lib/", "Something.php"],
"files": ["src/MyLibrary/functions.php"]
},
“autoload”: describes the autoloading needed for your library
“classmap”: Old PEAR packages and other
libraries
“files”: for php functions or initializations
“psr-0”: PSR-0 Compatible libraries
63.
"require-dev": {
"phpunit/phpunit": "~3.7"
},
“require-dev”: only needed if you are going to
contribute/develop the library or app
I’" 0*'r$- !f @/r"p7r!/r'""$r
.. 0! I wr)($ ($0(0
64.
"require-dev": {
"phpunit/phpunit": "~3.7"
},
“require-dev”: only needed if you are going to
contribute/develop the library or app
$ composer.phar require --dev phpunit/phpunit: ~3.7
I’" 0*'r$- !f @/r"p7r!/r'""$r
.. 0! I wr)($ ($0(0
65.
"require-dev": {
"phpunit/phpunit": "~3.7"
},
“require-dev”: only needed if you are going to
contribute/develop the library or app
$ composer.phar require --dev phpunit/phpunit: ~3.7
I’" 0*'r$- !f @/r"p7r!/r'""$r
.. 0! I wr)($ ($0(0
only required in development
66.
I.0('&&)./, 2p-'()./ '.- "!v)./ !.
how does Composer guarantee consistency
68.
“composer.json”: metadata and list of your
dependencies.
composer.json
69.
“composer.json”: metadata and list of your
dependencies.
composer.lock
composer.json
70.
“composer.json”: metadata and list of your
dependencies.
“composer.lock”: existing dependencies and
current commit hashes.
composer.lock
composer.json
87.
{
"name": "vendor-namespace/package-name",
"type": "symfony-bundle",
"description": "A sample package for examples",
"keywords": ["php", "package"],
"homepage": "http://doh.ms",
"license": "MIT",
"support": {
"email": "support@mylib.com",
"issues": "http://issues.lib.com"
}
"target-dir": "/folder/to/install",
}
“name”: this should be unique, pick a
good one!
88.
{
"name": "vendor-namespace/package-name",
"type": "symfony-bundle",
"description": "A sample package for examples",
"keywords": ["php", "package"],
"homepage": "http://doh.ms",
"license": "MIT",
"support": {
"email": "support@mylib.com",
"issues": "http://issues.lib.com"
}
"target-dir": "/folder/to/install",
}
“name”: this should be unique, pick a
good one!
“type”: will be used for more
advanced “custom”installs
89.
{
"name": "vendor-namespace/package-name",
"type": "symfony-bundle",
"description": "A sample package for examples",
"keywords": ["php", "package"],
"homepage": "http://doh.ms",
"license": "MIT",
"support": {
"email": "support@mylib.com",
"issues": "http://issues.lib.com"
}
"target-dir": "/folder/to/install",
}
“name”: this should be unique, pick a
good one!
“type”: will be used for more
advanced “custom”installs
“license”: very important!
90.
{
"name": "vendor-namespace/package-name",
"type": "symfony-bundle",
"description": "A sample package for examples",
"keywords": ["php", "package"],
"homepage": "http://doh.ms",
"license": "MIT",
"support": {
"email": "support@mylib.com",
"issues": "http://issues.lib.com"
}
"target-dir": "/folder/to/install",
}
“name”: this should be unique, pick a
good one!
“type”: will be used for more
advanced “custom”installs
“license”: very important!
“support”: point people the right
way.
91.
{
"name": "vendor-namespace/package-name",
"type": "symfony-bundle",
"description": "A sample package for examples",
"keywords": ["php", "package"],
"homepage": "http://doh.ms",
"license": "MIT",
"support": {
"email": "support@mylib.com",
"issues": "http://issues.lib.com"
}
"target-dir": "/folder/to/install",
}
“name”: this should be unique, pick 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
92.
Q2)*5! I w'..' p'(*+ (+)0!
B!!(0(r'pp)./ L)br'r, C!.(r)b2()!.
100.
"acme/foo": "1.0.x-dev#3ebbe75"
“#<ref>”: Get this specific commit
101.
"acme/foo": "1.0.x-dev#3ebbe75"
"acme/foo": "@dev"
"acme/foo": "1.0.*@beta"
“#<ref>”: Get this specific commit
102.
"acme/foo": "1.0.x-dev#3ebbe75"
"acme/foo": "@dev"
"acme/foo": "1.0.*@beta"
“#<ref>”: Get this specific commit
“@<state>”: Get a version outside
your default stability
103.
I .$$- (! 8$*2($ ' f$w 0*r)p(0
how to automate tasks with Composer
127.
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
Symfony
brikou/zend_filter : Zend Framework Filter Library
ext-filter : The filter PHP extension
dms/dms-filter : DMS Library, includes various bundles
and ...
shtumi/useful-bundle : Symfony ShtumiUsefulBundle
$ composer.phar search filter
136.
{
"repositories": [
{
"type": "composer",
"url": "http://packages.yourdomain.net"
}
],
“require”: {
“myvendor/mypackage”: “dev-master”
}
}
U0)./ ,!2r !w. S'()0
“composer”: use this just like it was
Packagist
137.
W+$r$ 0+!2&- I /$( +$&p?
http://getcomposer.org
#composer on irc.freenode.org