Anda di halaman 1dari 28

PHP MVC

Clean URL

Kode dasar untuk menguji url/uri segment

File index.php
<?php

?>
1

Hasilnya
File .htaccess digunakan untuk mereplace url yang dikirim user sesuai
dengan rule yang ditetapkan pada .htaccess
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Cetak url sebagai alat untuk menguji isi dari parameter url

File index.php
<?php

$url = $_GET['url'];
echo $url;

Setelah melakukan perubahan pada file index.php tersebut, lakukan


pengujian dengan mengetikkan http://localhost/namafolder/param1, lihat
tampilan yang dihasilkan
Kemudian, uji dengan menambahkan parameter ke-dua dengan
mengetikkan http://localhost/namafolder/param1/param2, dan lihat
tampilan yang dihasilkan.

Routing pada file index


Buat file index.php pada folder controllers
<?php
class Index
{
function __construct()
{
echo "Anda berada pada halaman index pada controller index";
}
}

Ubah file index.php pada root directory menjadi seperti tampak dibawah
ini.
<?php

$url = $_GET['url'];
echo $url;

require 'controllers/' .$url. '.php';


$controllers = new $url;

Ketika dijalankankan, anda akan mendapatkan tampilan seperti dibawah ini

Buat file help.php pada folder controllers


<?php
class Help
{
function __construct()
{
echo "Anda berada pada halaman Help";
}
}
Ketika dijalankan, hasilnya tampak sebagai berikut

Ketika kita tambahkan parameter pada url, maka hasilnya akan tampak
sebagai berikut

Sekarang ubah file index.php pada folder root directory web anda
<?php

$url = explode('/', $_GET['url']);


print_r($url);

require 'controllers/' .$url. '.php';


$controllers = new $url;

Dan hasilnya adalah sebagai berikut


Sekarang ubah lagi file index.php pada folder root directory tersebut di atas.
<?php

$url = explode('/', $_GET['url']);


print_r($url);

require 'controllers/' .$url[0]. '.php';


$controllers = new $url[0];

Hasilnya tampak sebagai berikut

Tambahkan kode untuk seleksi kondisi pada file index.php


<?php

$url = explode('/', $_GET['url']);


print_r($url);

require 'controllers/' .$url[0] .'.php';


$controllers = new $url;

if (isset($url[1])) {
$controllers->{$url[1]}();
}

Kemudian, ubah juga file help.php yang berada pada folder controllers
<?php
class Help
{
function __construct()
{
echo "Anda berada pada controller class Help";
}

function other()
{
echo "Anda berada pada method/parameter other";
}

}
sekarang, coba uji kembali file url sebalumnya

Sekarang kita uji dengan parameter tambahan setelah other. Ubah kode
index.php dengan menambahkan parameter ke-2 setelah controller
<?php

$url = explode('/', $_GET['url']);


print_r($url);

require 'controllers/' .$url[0] .'.php';


$controllers = new $url;

if (isset($url[2])) {
$controllers->{$url[1]}($url[2]);
}

if (isset($url[1])) {
$controllers->{$url[1]}();
}

Sekarang ubah juga file help.php dengan menambahkan parameter $args


pada function other
<?php
class Help
{
function __construct()
{
echo "Anda berada pada controller class Help";
}

function other($args=false)
{
echo "Anda berada pada method/parameter other <br>";
echo "optional: " . $args;
}

Sekarang kita uji


Sekarang, jika file index.php kita ubah seperti berikut:
<?php

$url = explode('/', $_GET['url']);


print_r($url);

require 'controllers/' .$url[0] .'.php';


$controllers = new $url[0];

if (isset($url[2])) {
$controllers->{$url[1]}($url[2]);
}

if (isset($url[1])) {
$controllers->{$url[1]}();
}

Maka hasilnya tampak seperti pada gambar di bawah ini

Jika kita uji dengan menyisakan tanda slash dibelakang controller, ternyata
masih muncul error. Lihat tampilan berikut
Untuk mengatasinya, gunakan fungsi rtrim. Lihat kode selengkapnya
sebagai berikut
<?php

$url = $_GET['url'];
$url = rtrim($url, '/');
$url = explode('/', $url);
print_r($url);

require 'controllers/' .$url[0] .'.php';


$controllers = new $url[0];

if (isset($url[2])) {
$controllers->{$url[1]}($url[2]);
}

if (isset($url[1])) {
$controllers->{$url[1]}();
}

Berikut tampilannya

Bootstrapping
Buatlah class Bootstrap pada folder libs. Kemudian buatlah function
__construct() yang isinya diambil dari file index.php. berikut isi dari file
bootsrap.php
Sekarang, intansiasi file bootstrap pada file index.php

Sekarang, jika kita uji url dengan controller yang tidak ditemukan pada
folder controller, maka akan muncul error seperti dibawah ini
Untuk mengatasinya, kita buat file error.php pada folder controllers dan
tambahkan/ubah exeption pada file bootsrap.php. lihat kode selengkapnya
sebagai berikut:

File bootstrap.php
Sekarang, jika kita lakukan uji coba maka hasilnya akan tampak seperti
gambar di bawah ini
Menggabungkan controller, model dan view

Langkah pertama, buatlah Parent class Controller pada folder libs

Semua file yang berada pada folder controllers harus meng-


extends/mewarisi Controller dan mewarisi method __construct() pada class
parentnya/controller class.

Lakukan hal yang sama untuk file help.php dan error.php


Sekarang, lakukan perubahan pada file index.php yang berada pada root
folder proyek dengan menambahkan file controller.php yang berada pada
folder libs.

Jika langkah-langkah tersebut benar, maka akan tampil halaman seperti


berikut

Menggabungkan controller dengan view

Untuk menggabungkan controller ke view, tambahkan class view pada


folder libs, kemudian ubah dan sisipkan instansiasi object view ke dalam file
controller. Lihat file berikut:
Jika dijalankan, maka akan tampil sebagai berikut

Sekarang, kita tambahkan fungsi render untuk menampilkan halaman views


menggunakan parameter
Pada folder views, tambahkan file header.php

Pada foler views, buatlah folder error dan tambahkan file index.php pada
folder tersebut

Sekarang, ubah controller error dan jalankan program dengan memanggil


controller error
Hasilnya

Ubah controller error seperti berikut ini


Untuk membuat dinamis pesan yang muncul berdasarkan kiriman dari
controller, ubah file index.php yang berada pada views/error/index.php

Berikut tampilan yang dihasilkan

Menghubungkan controller dengan model


Buatlah class Help_Model pada folder models, isikan kode berikut

Sekarang, panggil class Help_Model pada file controller Help

Membuat library Model pada folder libs


Ubah auto loader yang terdapat pada file index untuk menambahkan file
model

Ubah juga file help_model untuk mewarisi/extends dari class model

Jika dijalankan, akan tampil seperti berikut


BAB II

Jika kita mengakses halaman project tanpa menyertakan nama controller,


maka akan tampil error. Hal ini dikarenakan pada file bootstrap ada satu
variable untuk menangkap $_GET[‘url’].

Untuk mengatasi hal tersebut, diperlukan operator tertinary untuk


mengecek apakah url menyertakan nama controller apa tidak. Lihat
perubahan kode dengan menggunakan operator tertinary berikut ini:
Jika kita cek dengan mengaktifkan perintah print_r($url), maka terlihat
array([0]=>) tidak ada isinya. Untuk mengatasi hal tersebut, gunakan
perintah untuk cek apakah $url berisi kosong (emtpy) atau ada isinya. Lihat
tambahan kode berikut:
Ubah file header.php yang berada pada folder views sebagai berikut
<!doctype html>
<html>
<head>
<title>Test</title>
<link rel="stylesheet" href="public/css/default.css" />
</head>
<body>

<div id="header">
Header
</div>

<div id="content">

Buat file footer.php yang akan digunakan untuk menampilkan footer dari sebuah
aplikasi.
</div>
<div id="footer">(C) Footer</div>
</body>
</html>

Buat file index.php di dalam folder views/index/. Tambahkan kode program seperti
berikut ini. Ubah juga file index.php yang berada di folder views/error/, namun
untuk file ini ucapan selamat datang dihilangkan saja supaya lebih gampang untuk
membedakannya
<?php require 'views/header.php'; ?>

Halaman utama 'Selamat Datang'

<?php require 'views/footer.php'; ?>

Ubah file controller index.php yang berada pada folder controller menjadi seperti
berikut ini
<?php
class Index extends Controller
{
function __construct()
{
parent::__construct();
$this->view->render('index/index');
}
}

Ujicoba dengan memasukkan alamat url sebagai berikut: http://localhost/mvc/ dan


hasilnya tampak sebagai berikut ini
Untuk mengatur tampilan, maka diperlukan sebuah file css. File css seperti yang
telah di lampirkan pada halaman header.php terletak di folder
public/css/default.css
body {
background: silver;
}

#header {
padding: 20px;
background: gold;
}

#content {
background: #fff;
padding: 20px;
}

#footer {
background: green;
padding: 20px;
}

Berikut tampilan di browser ketika di uji coba

untuk tahap selanjutnya, download jquery dari situs resminya. Sebelum


menerapkan jquery, buatlah folder js dan images pada folder public yang
sebelumya telah dibuat. Berikut alamat jquery yang dapat langsung disimpan ke
computer local https://code.jquery.com/jquery-3.2.1.min.js, copy semua isi file
jquery-3.2.1.min.js pada sebuah file jquery.js di folder js tersebut di atas.
Tambahkan kode untuk mengikutsertakan jquery pada file header.php
<!doctype html>
<html>
<head>
<title>Test</title>
<link rel="stylesheet" href="public/css/default.css" />
<script src="public/js/jquery.js"></script>
<script src="public/js/custom.js"></script>
</head>
<body>

<div id="header">
Header
</div>

<div id="content">

Kemudian, buatlah file custom.js untuk menguji coba apakah jquery telah berhasil
terpasang dengan menghisi file tersebut dengan kode seperti berikut ini
$(document).ready(function(){
alert(1);
});

Ujicobalah dengan mengetikkan alamat localhost/mvc di browser anda, jika muncul


pesan pop up, berarti jquery anda telah berhasil terpasang.

Memfungsikan menu untuk mengubah halaman content.


Ketika menu di header diklik, maka yang berubah hanya halaman yang ada ditengah
(content). Untuk membuat menu tersebut, ubahlah file header.php yang berada di
folder views
</head>
<body>

<div id="header">
Header
<br />
<a href="index">Home</a>
<a href="help">Help</a>
<a href="login">Login</a>
</div>

<div id="content">

Buat controller login di folder controllers dengan nama file login.php. berikut kode
dari file login.php tersebut
<?php
class Login extends Controller
{
function __construct()
{
parent::__construct();
$this->view->render('login/index');
}
}

Buat view baru dengan membuat folder login pada folder views dan file index.php.
Adapun kode dari file view login tersebut adalah sebagai berikut
<?php require 'views/header.php'; ?>

Ini adalah halaman login

<?php require 'views/footer.php'; ?>

Ketika diuji coba, tampilan untuk view login tersebut tampak sebagai berikut

Untuk menu Help, halaman yang tampil masih belum menggunakan template yang
sudah kita buat. Jika kita panggil menu Help tersebut, header dan footer belum
diikutkan dalam layout tampilan. Untuk menggunakan template, maka ubahlah file
controller Help dengan menambahkan kode pada function __construct() seperti
contoh berikut
function __construct()
{
parent::__construct();
$this->view->render('help/index');
}
Untuk menampilkan hasil pemanggilan view tersebut, buatlah pula folder help di
dalam folder views dan file index.php di dalam folder help tersebut. Berikut kode
file index.php yang berada di folder help
<?php require 'views/header.php'; ?>

Ini merupakan halaman Help

<?php require 'views/footer.php'; ?>

Jika diuji coba, menu help tersebut telah berfungsi dan menghasilkan perubahan
tampilan hanya halaman tengah (content) dengan menampilkan halaman help.
Untuk header dan footer tidak ikut berubah.

Anda mungkin juga menyukai