git ssb

0+

k4ml / belajar-js



Commit e2fe037657927c278481ff4f05517b5b8d4e208b

Merge branch 'master' of https://github.com/mydevcommunity/mydevcommunity.github.io

Kamal Bin Mustafa committed on 3/2/2015, 3:55:36 PM
Parent: b7757616f9f45cb8a72a4ff4b974a46101673ebc
Parent: bdd9837a6b6a290bf9a188139b93549b6df24783

Files changed

_tips/pengenalan-composer.mdadded
_tips/pengenalan-composer.mdView
@@ -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>&nbsp;</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+<?php
55+require 'vendor/autoload.php';
56+```
57+
58+Contohnya, bina fail baru bernama `mail.php` seperti berikut:-
59+
60+```php
61+<?php
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