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
.