Contoh code dari artikel ini bisa dilihat di todo-project-php.
Pada artikel sebelumnya kita telah berhasil men-foward seluruh request ke
file entry point index.php. Selanjutnya kita akan menginisialisasi
Composer yang berfungsi sebagai dependency
manager untuk project PHP. Selain berfungsi sebagai dependency manager,
Composer juga melakukan autoload. Hal ini akan memudahkan kita dalam
menggunakan namespace pada project PHP tanpa mesti melalukan require
secara manual untuk masing-masing file script PHP.
Composer#
Inisialisasi Composer
composer init

Setelah menginisialisasi composer, kita perlu meng-update index.php
untuk meng-load autoload. Dengan menggunakan autoload kita tidak perlu
lagi meng-require file script PHP satu demi satu.
index.php
<?php
require 'vendor/autoload.php';
echo "Hello World";
Isi directory project kita setelah menginisialisasi Composer:
.
├── .htaccess
├── composer.json
├── index.php
├── src
└── vendor
composer.json berisikan definisi Composer pada project kita. File ini berisikan
daftar dependency dan konfigurasi autoload.
Directory vendor berisikan versi vendored dari dependency project kita. Directory
vendor boleh di-commit ke repository apabila kita ingin menyalin seluruh file
dependency. Jika tidak, kita bisa meng-retrieve seluruh dependency dengan
menjalankan composer install.
Apabila kita pernah menjalankan composer install, akan terbentuk satu file lagi
composer.lock yang berisikan versi dependency yang akan dipasang pada project
ini. File composer.lock biasanya tidak diedit secara manual tapi akan
di-update oleh composer install atau composer update (untuk meng-update dependency).
PHP Namespace#
Setelah meng-inisialisasi Composer, kita sekarang dapat menggunakan
namespace PHP untuk mengorganisasi code program. Check file composer.json
untuk melihat namespace yang dikonfigurasikan ketika kita menginisialisasi
composer.
composer.json
{
"name": "uph-22si1-web/todo",
"autoload": {
"psr-4": {
"Uph22si1Web\\Todo\\": "src/"
}
},
"authors": [
{
"name": "Des Dulianto",
"email": "desdulianto@gmail.com"
}
],
"require": {}
}
Berdasarkan konfigurasi composer.json di atas, nama namespace untuk project kita
adalah Uph22si1Web\Todo (\\ karena escape character) yang diletakkan di
directory src/. Selanjutnya seluruh code terkait aplikasi web kita akan diletakkan
di src/ di dalam namespace Uph22si1Web\Todo. Script index.php akan berfungsi
hanya untuk mem-bootstrap aplikasi web.
Server#
Sekarang kita akan memindahkan logic aplikasi web kita dari index.php ke src/Server.php.
index.php selanjutnya hanya akan menjalankan code bootstrap untuk menjalan aplikasi
web kita.
src/Server.php
<?php
namespace Uph22si1Web\Todo;
class Server
{
public function serve()
{
echo "Hello World";
}
}
Perhatikan bahwa lokasi file dalam namespace PHP mengikuti standard PSR-4 diletakkan
sesuai dengan nama namespace. Misalnya class Server ini akan didefinisikan di
Server.php dan berada di namespace Uph22si1Web\Todo berarti kita harus meletakkan
class Server di src/Server.php (sesuai konfigurasi di composer.json).
Berikutnya kita akan meng-load class Server dan kemudian meng-instantiate server untuk melayani request dari user.
index.php
<?php
use Uph22si1Web\Todo\Server;
$server = new Server();
$server->serve();
Berikut isi directory project kita:
.
├── .htaccess
├── composer.json
├── composer.lock
├── index.php
├── src
│ └── Server.php
└── vendor
├── autoload.php
└── composer
Pastikan web kita masih bisa diakses di http://localhost/todo.
