Commit e2fe037657927c278481ff4f05517b5b8d4e208b
Merge branch 'master' of https://github.com/mydevcommunity/mydevcommunity.github.io
Kamal Bin Mustafa committed on 3/2/2015, 3:55:36 PMParent: b7757616f9f45cb8a72a4ff4b974a46101673ebc
Parent: bdd9837a6b6a290bf9a188139b93549b6df24783
Files changed
_tips/pengenalan-composer.md | added |
_tips/pengenalan-composer.md | ||
---|---|---|
@@ -1,0 +1,97 @@ | ||
1 | +--- | |
2 | +layout: tips | |
3 | +title: 'PHP: Pengenalan kepada Composer' | |
4 | +author: kamalmustafa | |
5 | +date: 2015-02-05 | |
6 | +level: 2 | |
7 | +summary: > | |
8 | + Penerangan ringkas tentang penggunaan Composer dalam aplikasi PHP. | |
9 | +--- | |
10 | + | |
11 | +Composer adalah tools untuk mendapatkan *dependencies* bagi projek PHP anda. Sebelum Composer, jika anda ingin menggunakan sebarang *library* luar, anda perlu download ia terlebih dahulu, unzip (jika dalam bentuk archive), dan kemudian *copy* ke folder projek anda. Bagaimana pula jika *library* tersebut turut bergantung kepada *library* lain ? Ulang semula proses sebelum ini. | |
12 | + | |
13 | +Terlebih dahulu anda perlu install `composer`. Ia boleh dilakukan melalui *command* berikut:- | |
14 | + | |
15 | +```console | |
16 | +curl -sS https://getcomposer.org/installer | php | |
17 | +``` | |
18 | +Anda akan mendapat *output* seperti berikut:- | |
19 | + | |
20 | +```console | |
21 | +#!/usr/bin/env php | |
22 | +All settings correct for using Composer | |
23 | +Downloading... | |
24 | +Composer successfully installed to: /home/kamal/php/myshop/composer.phar | |
25 | +Use it: php composer.phar | |
26 | +``` | |
27 | +Seterusnya, untuk men'download' *library* yang anda inginkan, bina fail bernama `composer.json` seperti berikut:- | |
28 | + | |
29 | +```json | |
30 | +{ | |
31 | + "require": { | |
32 | + "swiftmailer/swiftmailer": "5.3.1" | |
33 | + } | |
34 | +} | |
35 | +``` | |
36 | + | |
37 | +Kemudian, jalankan arahan berikut:- | |
38 | + | |
39 | +```console | |
40 | +php composer.phar install | |
41 | +``` | |
42 | +Anda akan mendapat output lebih kurang seperti berikut apabila selesai:- | |
43 | + | |
44 | +<a href="http://imgur.com/tVjCE09"><img src="http://i.imgur.com/tVjCE09.png" title="source: imgur.com" /></a> | |
45 | + | |
46 | +<div class="admonition-info"> | |
47 | + Perhatikan satu folder baru bernama <code>vendor</code> dibina. Ia akan mengandungi kesemua code yang di'download' melalui <code>composer</code>. | |
48 | +</div> | |
49 | +<div> </div> | |
50 | + | |
51 | +Setelah `composer` selesai download, anda boleh mula menggunakan library tersebut dalam *script* PHP anda dengan hanya menambah baris berikut:- | |
52 | + | |
53 | +```php | |
54 | + | |
55 | +require 'vendor/autoload.php'; | |
56 | +``` | |
57 | + | |
58 | +Contohnya, bina fail baru bernama `mail.php` seperti berikut:- | |
59 | + | |
60 | +```php | |
61 | + | |
62 | +require 'vendor/autoload.php'; | |
63 | + | |
64 | +$transport = Swift_SmtpTransport::newInstance('127.0.0.1', 25); | |
65 | +$mailer = Swift_Mailer::newInstance($transport); | |
66 | + | |
67 | +$message = Swift_Message::newInstance('Wonderful Subject') | |
68 | + ->setFrom(array('john@doe.com' => 'John Doe')) | |
69 | + ->setTo(array('kamal-test@mailinator.com')) | |
70 | + ->setBody('Here is the message itself') | |
71 | + ; | |
72 | + | |
73 | +$result = $mailer->send($message); | |
74 | +``` | |
75 | + | |
76 | +Dan anda boleh jalankannya melalui `php mail.php` dan email akan dihantar. | |
77 | + | |
78 | +## Lock file | |
79 | +Jika anda perasan, setelah selesai menjalankan arahan `composer install`, satu fail baru bernama `composer.lock` akan dijana oleh `composer`. Fail ini berfungsi untuk merekodkan version sebenar *libraries* yang di'install' oleh `composer`. Ini kerana `composer.json` mungkin ditulis seperti berikut:- | |
80 | + | |
81 | +```json | |
82 | +{ | |
83 | + "require": { | |
84 | + "swiftmailer/swiftmailer": "5.3.1", | |
85 | + "symfony/yaml": "~2.5" | |
86 | + } | |
87 | +} | |
88 | +``` | |
89 | +Dalam spesifikasi `composer.json` di atas, versi untuk `swiftmailer` ditulis secara spesifik manakala versi untuk `symfony/yaml` ditulis dalam format julat tertentu. `~2.5` adalah bersamaan dengan `>=2.5 < 3.0`. Bila `composer install` dijalankan buat pertama kali (`composer.lock` masih belum wujud), maka ia akan cuba mendapatkan versi terkini yang ada pada masa tersebut, mengikut julat yang ditetapkan. | |
90 | + | |
91 | +Ini bermakna, jika developer A menjalankan `composer install` dan mendapat version `symfony/yaml 2.5.1` dan kemudian version baru dikeluarkan, developer B menjalankan `composer install` beberapa hari kemudian, dia mungkin akan mendapat version `2.5.2`. Ini menyebabkan perbezaan kod yang diperolehi oleh developer A dan B yang mungkin akan menyebabkan kekeliruan. Jadi `composer.lock` akan merekodkan version sebenar yang diperolehi oleh `composer` semasa ia pertama kali dijalankan dan `composer.install` seterusnya akan merujuk kepada spesifikasi yang terkandung dalam `composer.lock`. | |
92 | + | |
93 | +Jadi amat penting sekali untuk `composer.lock` disertakan sekali ke dalam *version control system* yang anda gunakan. | |
94 | + | |
95 | +## Rujukan | |
96 | +* https://getcomposer.org/doc/01-basic-usage.md#package-versions | |
97 | +* https://blog.engineyard.com/2014/composer-its-all-about-the-lock-file (terima kasih kepada [Mior Muhammad Zaki](https://github.com/crynobone)). |
Built with git-ssb-web