Slide 1

Slide 1 text

C!"p#$r Dependency Management for PHP

Slide 2

Slide 2 text

W%&' I( C!"p#$r

Slide 3

Slide 3 text

W%&' I( C!"p#$r a dependency management system C!"p#$r )(:

Slide 4

Slide 4 text

W%&' I( C!"p#$r a dependency management system C!"p#$r )(: C!"p#$r )( *!': a package manager (it doesn’t install anything globally)

Slide 5

Slide 5 text

I*('&++)*, C!"p#$r G+!b&++- (http:/ /getcomposer.org/download/) $ curl -sS https://getcomposer.org/installer | php $ mv composer.phar /usr/local/bin/composer

Slide 6

Slide 6 text

U()*, C!"p#$r

Slide 7

Slide 7 text

U()*, C!"p#$r composer.json

Slide 8

Slide 8 text

U()*, C!"p#$r composer.json - dependencies

Slide 9

Slide 9 text

U()*, C!"p#$r composer.json - dependencies - development dependencies

Slide 10

Slide 10 text

U()*, C!"p#$r composer.json - dependencies - development dependencies - config

Slide 11

Slide 11 text

U()*, C!"p#$r composer.json - dependencies - development dependencies - config - metadata

Slide 12

Slide 12 text

U()*, C!"p#$r composer.json - dependencies - development dependencies - config - metadata composer.lock

Slide 13

Slide 13 text

U()*, C!"p#$r composer.json - dependencies - development dependencies - config - metadata composer.lock - locks versions of dependencies

Slide 14

Slide 14 text

U()*, C!"p#$r composer.json - dependencies - development dependencies - config - metadata composer.lock - locks versions of dependencies - run the same version everywhere

Slide 15

Slide 15 text

.!"p#$r./(!*

Slide 16

Slide 16 text

.!"p#$r./(!* dependencies

Slide 17

Slide 17 text

.!"p#$r./(!* dependencies uses “require” key

Slide 18

Slide 18 text

.!"p#$r./(!* dependencies uses “require” key { “require”: { “monolog/monolog”: “1.0.*” } }

Slide 19

Slide 19 text

.!"p#$r./(!* dependencies uses “require” key { “require”: { “monolog/monolog”: “1.0.*” } } vendor

Slide 20

Slide 20 text

.!"p#$r./(!* dependencies uses “require” key { “require”: { “monolog/monolog”: “1.0.*” } } vendor package

Slide 21

Slide 21 text

.!"p#$r./(!* dependencies uses “require” key { “require”: { “monolog/monolog”: “1.0.*” } } vendor package version

Slide 22

Slide 22 text

.!"p#$r./(!* dependencies uses “require” key version

Slide 23

Slide 23 text

.!"p#$r./(!* dependencies uses “require” key version exact: 1.0.3

Slide 24

Slide 24 text

.!"p#$r./(!* dependencies uses “require” key version exact: 1.0.3 range: >, >=, <, <=, != (>=1.0,<2.0)

Slide 25

Slide 25 text

.!"p#$r./(!* dependencies uses “require” key version exact: 1.0.3 range: >, >=, <, <=, != (>=1.0,<2.0) wildcard: 2.0.*

Slide 26

Slide 26 text

.!"p#$r./(!* dependencies uses “require” key version exact: 1.0.3 range: >, >=, <, <=, != (>=1.0,<2.0) wildcard: 2.0.* next major release: ~1.4

Slide 27

Slide 27 text

.!"p#$r./(!*

Slide 28

Slide 28 text

.!"p#$r./(!* development dependencies

Slide 29

Slide 29 text

.!"p#$r./(!* development dependencies dependencies needed in development

Slide 30

Slide 30 text

.!"p#$r./(!* development dependencies dependencies needed in development example: phpunit

Slide 31

Slide 31 text

.!"p#$r./(!* development dependencies dependencies needed in development example: phpunit uses “require-dev” key

Slide 32

Slide 32 text

.!"p#$r./(!* development dependencies dependencies needed in development example: phpunit uses “require-dev” key { “require-dev”: { “phpunit/phpunit”: “3.7.*” } }

Slide 33

Slide 33 text

.!"p#$r./(!* development dependencies dependencies needed in development example: phpunit uses “require-dev” key install with --dev flag

Slide 34

Slide 34 text

0*1)*, P&.2&,$( Packagist (https:/ /packagist.org/)

Slide 35

Slide 35 text

I*('&++)*, D$p$*1$*.)$( Up1&'$ creates vendor/ directory and autoloader $ php composer.phar install $ php composer.phar update

Slide 36

Slide 36 text

S)1$b&r: .,)'),*!r$ composer.phar vendor/

Slide 37

Slide 37 text

.!"p#$r.+!.2

Slide 38

Slide 38 text

.!"p#$r.+!.2 S%!3+1 I )*.+31$ )'?

Slide 39

Slide 39 text

.!"p#$r.+!.2 application: yes S%!3+1 I )*.+31$ )'?

Slide 40

Slide 40 text

.!"p#$r.+!.2 application: yes S%!3+1 I )*.+31$ )'? package: no

Slide 41

Slide 41 text

U()*, D$p$*1$*.)$( include autoloader require ‘vendor/autoload.php’; use packages $log = new Monolog\Logger(‘name’); $handler = new Monolog\Handler\StreamHandler(‘app.log’, ... $log->pushHandler($handler); $log->addWarning(‘Foo’);

Slide 42

Slide 42 text

U()*, 4$ A3'!+!&1$r

Slide 43

Slide 43 text

U()*, 4$ A3'!+!&1$r isn’t just for composer packages

Slide 44

Slide 44 text

U()*, 4$ A3'!+!&1$r isn’t just for composer packages can load PSR-0 compatible code

Slide 45

Slide 45 text

S)1$b&r: PSR-0

Slide 46

Slide 46 text

S)1$b&r: PSR-0 namespaces match path and filename

Slide 47

Slide 47 text

S)1$b&r: PSR-0 namespaces match path and filename example: \Acme\Foo\Bar -> src/Acme/Foo/Bar.php

Slide 48

Slide 48 text

S)1$b&r: PSR-0 namespaces match path and filename example: \Acme\Foo\Bar -> src/Acme/Foo/Bar.php

Slide 49

Slide 49 text

U()*, 4$ A3'!+!&1$r isn’t just for composer packages can load PSR-0 compatible code

Slide 50

Slide 50 text

U()*, 4$ A3'!+!&1$r isn’t just for composer packages can load PSR-0 compatible code { “autoload”: { “psr-0”: { “Acme”: “src/” } } }

Slide 51

Slide 51 text

U()*, 4$ A3'!+!&1$r isn’t just for composer packages can load PSR-0 compatible code can also load code that doesn’t follow PSR-0

Slide 52

Slide 52 text

U()*, 4$ A3'!+!&1$r isn’t just for composer packages can load PSR-0 compatible code can also load code that doesn’t follow PSR-0 { “autoload”: { “classmap”: [“src/”, “lib/”] } }

Slide 53

Slide 53 text

U()*, 4$ A3'!+!&1$r isn’t just for composer packages can load PSR-0 compatible code can also load code that doesn’t follow PSR-0 or individual files (functions file)

Slide 54

Slide 54 text

U()*, 4$ A3'!+!&1$r isn’t just for composer packages can load PSR-0 compatible code can also load code that doesn’t follow PSR-0 or individual files (functions file) { “autoload”: { “files”: [“src/functions.php”] } }

Slide 55

Slide 55 text

Cr$&')*, A P&.2&,$

Slide 56

Slide 56 text

Cr$&')*, A P&.2&,$ your application is a package

Slide 57

Slide 57 text

Cr$&')*, A P&.2&,$ your application is a package not installable by others without metadata

Slide 58

Slide 58 text

Cr$&')*, A P&.2&,$ your application is a package not installable by others without metadata needs a name

Slide 59

Slide 59 text

Cr$&')*, A P&.2&,$ your application is a package not installable by others without metadata { “name”: “vendor/name” } needs a name

Slide 60

Slide 60 text

Cr$&')*, A P&.2&,$ your application is a package not installable by others without metadata version defined in one of three places needs a name

Slide 61

Slide 61 text

Cr$&')*, A P&.2&,$ your application is a package not installable by others without metadata version defined in one of three places - composer.json (“version” tag) needs a name

Slide 62

Slide 62 text

Cr$&')*, A P&.2&,$ your application is a package not installable by others without metadata { “version”: “1.0.0” } version defined in one of three places - composer.json (“version” tag) needs a name

Slide 63

Slide 63 text

Cr$&')*, A P&.2&,$ your application is a package not installable by others without metadata version defined in one of three places - composer.json (“version” tag) - VCS tag needs a name

Slide 64

Slide 64 text

Cr$&')*, A P&.2&,$ your application is a package not installable by others without metadata version defined in one of three places - composer.json (“version” tag) - VCS tag - 1.0.0 - v1.0.0 - 1.5.0-RC1 - v1.5.0-beta2 needs a name

Slide 65

Slide 65 text

Cr$&')*, A P&.2&,$ your application is a package not installable by others without metadata version defined in one of three places - composer.json (“version” tag) - VCS tag - VCS branch needs a name

Slide 66

Slide 66 text

Cr$&')*, A P&.2&,$ your application is a package not installable by others without metadata version defined in one of three places - composer.json (“version” tag) - VCS tag - VCS branch - {branchname}-dev (2.0 -> 2.0.x-dev) - dev-{branchname} (dev-master) needs a name

Slide 67

Slide 67 text

Cr$&')*, A P&.2&,$

Slide 68

Slide 68 text

Cr$&')*, A P&.2&,$ O'%$r M$'&1&'&:

Slide 69

Slide 69 text

Cr$&')*, A P&.2&,$ O'%$r M$'&1&'&: - description

Slide 70

Slide 70 text

Cr$&')*, A P&.2&,$ O'%$r M$'&1&'&: - description - type (library, project, etc)

Slide 71

Slide 71 text

Cr$&')*, A P&.2&,$ O'%$r M$'&1&'&: - description - type (library, project, etc) - keywords (searching on Packagist)

Slide 72

Slide 72 text

Cr$&')*, A P&.2&,$ O'%$r M$'&1&'&: - description - type (library, project, etc) - keywords (searching on Packagist) - homepage

Slide 73

Slide 73 text

Cr$&')*, A P&.2&,$ O'%$r M$'&1&'&: - description - type (library, project, etc) - keywords (searching on Packagist) - homepage - license

Slide 74

Slide 74 text

Cr$&')*, A P&.2&,$ O'%$r M$'&1&'&: - description - type (library, project, etc) - keywords (searching on Packagist) - homepage - license - authors

Slide 75

Slide 75 text

Cr$&')*, A P&.2&,$ O'%$r M$'&1&'&: - description - type (library, project, etc) - keywords (searching on Packagist) - homepage - license - authors - more at http:/ /getcomposer.org/doc/04-schema.md

Slide 76

Slide 76 text

U()*, C3('!" P&.2&,$(

Slide 77

Slide 77 text

U()*, C3('!" P&.2&,$( define repository in composer.json

Slide 78

Slide 78 text

U()*, C3('!" P&.2&,$( define repository in composer.json { “repositories”: [ { “type”: “vcs”, “url”: “repository-url” } ] }

Slide 79

Slide 79 text

U()*, C3('!" P&.2&,$( define repository in composer.json require package

Slide 80

Slide 80 text

U()*, C3('!" P&.2&,$( define repository in composer.json { “require”: { “vendor/name”: “dev-master” } } require package

Slide 81

Slide 81 text

A1v&*.$ C!"p#$r

Slide 82

Slide 82 text

A1v&*.$ C!"p#$r B)*&r)$(

Slide 83

Slide 83 text

A1v&*.$ C!"p#$r include binaries in composer B)*&r)$(

Slide 84

Slide 84 text

A1v&*.$ C!"p#$r include binaries in composer B)*&r)$( { “bin”: [“bin/script”, ...] }

Slide 85

Slide 85 text

A1v&*.$ C!"p#$r include binaries in composer B)*&r)$( installs in vendor/bin

Slide 86

Slide 86 text

A1v&*.$ C!"p#$r include binaries in composer B)*&r)$( installs in vendor/bin S.r)p'(

Slide 87

Slide 87 text

A1v&*.$ C!"p#$r include binaries in composer B)*&r)$( installs in vendor/bin S.r)p'( called during composer events

Slide 88

Slide 88 text

A1v&*.$ C!"p#$r include binaries in composer B)*&r)$( installs in vendor/bin S.r)p'( called during composer events php callback or binary

Slide 89

Slide 89 text

A1v&*.$ C!"p#$r include binaries in composer B)*&r)$( installs in vendor/bin S.r)p'( called during composer events php callback or binary http:/ /getcomposer.org/doc/articles/scripts.md

Slide 90

Slide 90 text

N$$1 H$+p? http:/ /getcomposer.org/doc/