Slide 1

Slide 1 text

Dependency Manager for PHP Sam-Mauris Yong HeartCode Singapore [email protected] http://mauris.sg/ @_mauris Sam-Mauris Yong, Singapore PHP User Group 28 November 2012 1

Slide 2

Slide 2 text

You use dependencies! It’s a lie to say your PHP application has no dependency! 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 2 Your PHP Application PHP

Slide 3

Slide 3 text

Dependency can be a mess 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 3 Your PHP Application PHP 5.3 PHP 5.4 PHP 5.1/5.2 Luracast Restler Monolog

Slide 4

Slide 4 text

Traditionally… • Download & Extract • No version management • No dependency checks • Updates are troublesome PHP Library website Library Archive App Library Folder Sam-Mauris Yong, Singapore PHP User Group 28 November 2012 4

Slide 5

Slide 5 text

Software Reusability • Develop modularly • High Cohesion, Low Coupling • Focus on objective of software 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 5

Slide 6

Slide 6 text

Composer • Manages dependencies and their versions • Ensures compatibility through version check • Ease of dependency resolve and updates • Helps to keep focus on Software Reusability 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 6

Slide 7

Slide 7 text

Managed Dependencies • CLI Tool, runs on PHP • Install dependencies per-project • Easy dependency updates • Lightweight and easy to use 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 7

Slide 8

Slide 8 text

Defining Dependencies composer.json • At project root directory • Defines your project dependencies 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 8 { "require": { "php": ">=5.3.0", "monolog/monolog": "1.*", "gabordemooij/redbean": "3.3.5", "pear-pear.phpunit.de/PHPUnit": "3.7.x" } } composer.json

Slide 9

Slide 9 text

Dependency versions • "php": ">=5.3.0" – PHP 5.3.8 – PHP 5.3.10 – PHP 5.4 • "monolog/monolog": "1.*" – Monolog 1.2.1 – Monolog 1.3 • "packfire/packfire": "2.0.*" – Packfire 2.0.1 – Packfire 2.0.3 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 9

Slide 10

Slide 10 text

Where are the packages? • "monolog/monolog"? • "gabordemooij/redbean"? 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 10

Slide 11

Slide 11 text

Packagist 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 11

Slide 12

Slide 12 text

Other Sources • PEAR, Git, SVN, Mercurial repositories • Repositories with composer.json can be used as a dependency! 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 12 { "name": "acme/blog", "repositories": [ { "type": "vcs", "url": "https://github.com/composer/hello-world" } ], "require": { "acme/hello-world": "dev-master" } }

Slide 13

Slide 13 text

Archive Sources • Zip, Phar, etc. • http://getcomposer.org/doc/05-repositories.md 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 13 { "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" } } } ], "require": { "smarty/smarty": "3.1.*" } }

Slide 14

Slide 14 text

How to install dependencies? • Download Composer: • Install Dependencies: • Update Dependencies: 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 14 $ curl -s https://getcomposer.org/installer | php $ php composer.phar install $ php composer.phar update

Slide 15

Slide 15 text

composer.lock • Created at installation if does not exist • If it exists, Composer will install versions of the dependencies specified in this file. • Commit with VCS – Everyone works with the same dependency versions – Deployment ensures same dependency versions • Updating dependencies will update the version numbers in composer.lock 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 15

Slide 16

Slide 16 text

Composer Autoloader • Simple PSR-0 autoloader included 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 16 pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING)); // add records to the log $log->addWarning('Foo'); $log->addError('Bar'); index.php

Slide 17

Slide 17 text

Packfire Framework • Uses Composer for link between App and Framework • Ensures tested compatibility 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 17 Packfire Application PHP Requires Packfire 2.0.* Requires PHP >= 5.3.0

Slide 18

Slide 18 text

Use in Travis CI • .travis.yml • Result of a Build Job with Composer Use: https://travis-ci.org/packfire/packfire- framework/jobs/3013917 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 18 before_script: - composer install

Slide 19

Slide 19 text

Making project a library • Specify name, version and other metadata in composer.json • Publish to Packagist, Github, BitBucket etc. • http://getcomposer.org/doc/02-libraries.md 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 19

Slide 20

Slide 20 text

Get Composer http://getcomposer.org/ • Look around • Make modular projects • Share reusable code • Have fun with PHP 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 20

Slide 21

Slide 21 text

Questions? 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 21

Slide 22

Slide 22 text

Anchor App for Windows 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 22 http://heartcode.sg/apps/anchor

Slide 23

Slide 23 text

Thank you! 28 November 2012 Sam-Mauris Yong, Singapore PHP User Group 23