Khanh Hoang - Kenn
Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.
Composer giúp ta quản lý các lib bên ngoài nâng cấp, uninstall... Tương tự như npm của Node.js hay Sublime Packages của Sublime Text 2.
Trước khi cài thì bạn nên cài qua git, php trong command line.
Hướng dẫn cài git tại đây: http://msysgit.github.com/
Thực hành:
1) Tạo example project (test_composer).
2) Download composer:
php -r "eval('?>'.file_get_contents('http://getcomposer.org/installer'));"
3) Tạo file composer.json có nội dung như sau: (cấu trúc là: vendorname/projectname: version)
{ "require": { "monolog/monolog": "1.0.*" } }
4) Install monolog:
php composer.phar install
5) Sau khi install thì composer sẽ tạo thư mục vendor và download project monolog vào trong thư mục vendor.
6) Composer sẽ tạo file composer.lock. Lần sau khi install nếu composer thấy file này sẽ install dựa vào file này, nếu không có file này sẽ install dựa vào composer.json. Điều đó có nghĩa: nếu muốn change json thì ta phải dùng lệnh update để update vào composer.lock
php composer.phar update
7) Để dùng composer thì chỉ việc require:
require 'vendor/autoload.php';
8) Run file /index.php có nội dung như sau, nếu tạo file app.log thì ta đã thành công:
<?php require 'vendor/autoload.php'; $log = new Monolog\Logger('name'); $log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING)); $log->addWarning('Foo');
9) Để load thư viện riêng của ta thì ta làm như sau:
+ Khai bào thư mục Acme, Cata trong file composer.json
{ "require": { "monolog/monolog": "1.0.*" }, "autoload": { "psr-0": { "Acme": "src/", "Cata": "src1/" } } }
+ Tạo file Foo.php trong /src/Acme/Foo.php và /src1/Cata/Mala/Foo.php có nội dung như sau:
<?php // Acme namespace Acme; class Foo { function __construct () { echo 'Khoi tao Acme!'; } } <?php // Cata\Mala namespace Cata\Mala; class Foo { function __construct () { echo 'Khoi tao class Cata Mala!'; } }
+ Update lock file:
php composer.phar update
+ Run file test2.php có nội dung sau:
<?php require 'vendor/autoload.php'; new Acme\Foo();
+ Nếu hiện ra "Khoi tao Acme!" là ta đã thực hiện thành công việc autoload cho Acme.
+ Cuối cùng run file index3.php có nội dung sau:
<?php require 'vendor/autoload.php'; new Cata\Mala\Foo();
+ Nếu hiện ra "Khoi tao class Cata Mala!!" là ta đã thực hiện thành công việc autoload cho Cata Mala.
+ Ghi chú: Nếu bị lỗi 'fatal error - namespace must be the first statement in the script' là do file được encode không bằng Bom khi dùng Notepad++. Để Fix chỉ việc mở notepad++ -> Encoding in utf-9 withor BOM.