Lewati ke konten utama
  1. Posts/

PHP MVC Web - Part 2 Namespace & Composer

·448 kata·3 menit· loading · loading ·
Code Web Php
Desdulianto
Penulis
Desdulianto
Seorang professional IT, bekerja dari rumah
php-web-mvc - This article is part of a series.
Part 2: This Article

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

Inisialisasi Composer

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.

php-web-mvc - This article is part of a series.
Part 2: This Article