Framework MVC sederhana dibuat dengan PHP untuk memisahkan kode program dari antarmuka. Model bertanggung jawab atas pengelolaan data, view menampilkan antarmuka, dan controller menghubungkan model dan view. Contoh controller blog dan model blog dibuat untuk menampilkan daftar artikel blog dan form tambah artikel.
1. Membuat MVC Framework Sederhana dengan PHP
Kali ini kita akan membuat sebuah MVC framework di PHP.
Aplikasi yang dibuat sangat sederhana namun memungkinkan kita untuk memahami cara kerjanya.
MVC pada awalnya banyak digunakan dalam aplikasi GUI dekstop, tetapi saat ini dengan perkembangan
dan kematangan bahasa pemrograman web, bermunculanlah beberapa framework yang menggunakan
arsitektur ini.
Kayaknya sih yang memulai visi web ini adalah David Heinemeier Hansson pembuat Ruby On Rails, yang
pertama kali meluncurkan MVC untuk pertama kalinya ke web.
Sebelum makin OOT mari kita lajutkan bahasan ini
MVC, singkatnya adalah cara yang efisien, bersih dan cepat untuk memisahkan kode program dari kode
HTML, atau antar muka lain yang kita pilih.
MVC berarti, Model – View – Controller.
Model: bertanggungjawab terhadap pengelolaan data seperti SQL databases dan operasi SELECT,
UPDATE, DELETE,dsb, dst, dll
View: menampilkan antarmuka (UI), html, css, javascript dan sebagainya
Controller: Jantung dan otak dari arsitektur MVC, tempat semua request masuk, controller adalah yang
menjembatani antara view dan model.
Berikut skema sederhana bagaimana semua ini bekerja.
2. 1. Pengunjung mengetik http://www.umsite.com/blog
2. Framework akan mengarahkan ke controller blog.php
3. Controller akan memproses dan membentuk informasi
4. Model akan mengirim ke Controller data yang diperlukan oleh Controller.
5. Controller akan mengemas informasi ini untuk diberikan ke view.
6. Dan akhirnya, controller akan memanggil view dan menampilkannya sebagai antarmuka
Tidak semua MVC framework berjalan seperti itu, tetapi ini adalah dasar dari framework yang akan kita
buat dalam pembahasan ini
Ayo kita mulai ..
Tentukan struktur datanya
./my_mvc
./my_mvc/application
./my_mvc/application/controller
./my_mvc/application/model
./my_mvc/application/view
Itu sudah cukup jelas, gak usah diterangin lagi ya.. ^_^V
/.htaccess
Sebelumnya kita harus membuat file .httaccess, file ini akan mengarahkan semua permintaan HTTP ke
file index.php.
RewriteEngine On
RewriteBase /my_mvc/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
Note: mod_rewrite harus sudah aktif pada konfigurasi Apache webservernya (ceritanya.. ini pake web
server Apache gitu, kalo beda ya sesuai-in aja ye..… ^_^V).
/index.php
Index.php seperti yang dijelaskan sebelumnya adalah merupakan pintu gerbang aplikasi ini, kapanpun
kita mengakses URL, maka .htaccess akan mengarahkan ke file index.php ini dan file ini akan memuat
API framework kita, dan API akan memanggil controller dan seterusnya.
3. //Mendefiniskan URL
define("BASE_PATH", "http://localhost");
//Mendefiniskan basepath
$path = "/my_mvc";
//Mendapatkan inisial PATH.
$url = $_SERVER['REQUEST_URI'];
$url = str_replace($path,"",$url);
//membuat array dari URL
$array_tmp_uri = preg_split('[/]', $url, -1, PREG_SPLIT_NO_EMPTY);
//Disini, ditentukan peran masing-masing segmen dalam URL
$array_uri['controller'] = $array_tmp_uri[0]; // adalah class
$array_uri['method'] = $array_tmp_uri[1]; // adalah fungsi
$array_uri['var'] = $array_tmp_uri[2]; //adalah variabel/parameter
//memuat base API
require_once("application/base.php");
//memuat controller
$application = new Application($array_uri);
$application->loadController($array_uri['controller']);
/application/base.php
Class berikut ini adalah class yang utama dan sangat penting, mengingat dari class inilah controller yang
akan kita buat , demikian pun model dan view-nya akan di 'load'
class Application
{
var $uri;
var $model;
function __construct($uri)
{
$this->uri = $uri;
}
function loadController($class)
{
$file = "application/controller/".$this->uri['controller'].".php";
if(!file_exists($file)) die();
require_once($file);
$controller = new $class();
if(method_exists($controller, $this->uri['method']))
{
$controller->{$this->uri['method']}($this->uri['var']);
} else {
$controller->index();
}
}
function loadView($view,$vars="")
{
if(is_array($vars) && count($vars) > 0)
extract($vars, EXTR_PREFIX_SAME, "wddx");
require_once('view/'.$view.'.php');
}
function loadModel($model)
{
require_once('model/'.$model.'.php');
$this->$model = new $model;
4. }
}
Percaya gak, kita barusan saja membuat 'ultra-slim-light MVC framework'. Nggak susah 'kan?
Nah sekarang, coba kita mulai memakai framework yang barusan kita bikin itu dengan membuat
controller, model dan 2 buah view untuk sebuah blog.
/application/controller/blog.php
Ini adalah nama dari controller-nya, jadi setiap kita mengakses http://localhost/my_mvc/blog/ maka
class Application akan memfilter URL dari index.php, dan akan memuat file blog.php.
class Blog extends Application
{
function __construct()
{
$this->loadModel('model_blog');
}
function index()
{
$articles = $this->model_blog->select();
$data['articles'] = $articles;
$this->loadView('view_blog',$data);
}
function add($title="")
{
$data['title'] = $title;
$this->loadView('view_blog_add',$data);
}
}
Jika diperhatikan, dalam constructor class-nya kita bisa menentukan 'model' yang akan digunakan,
dalam kasus ini kita memilih 'model_blog', dan model ini akan dimuat dari file
./application/model/model_blog.php (akan dijelaskan entar ya…)
Secara default, class ini akan menjalankan semua kode dalam fungsi index(), tetapi jika kita mengakses
http://localhost/my_mvc/blog/add, maka class Blog ini akan menjalankan fungsi add(). Sederhana
kan?
Di dalam setiap fungsi dari Class yang kita buat dapat memanggil fungsi-fungsi dari model juga, atau
mendefinisikan variabel yang akan digunakan di dalam 'view'.
Kalo dilihat lebih dekat fungsi index() terlihat bahwa:
- memanggil fungsi select() dari model model_blog.php
- membuat sebuah array yang berisi data variable
5. - memuatnya ke dalam sebuah view dari variable array tersebut
/application/model/model_blog.php
class model_blog extends Application
{
function __construct()
{
//lakukan sesuatu dimari, koneksi DB, dst,dsb,dll..
}
function select()
{
return array("title 1","title 2","title3");
}
}
Class ini bertanggungjawab untuk pengelolaan Database, pada contoh model yang dibuat ini kita buat
fungsi sederhana select() yang mensimulasikan array dari hasil query ke database dengan beberapa
baris data.
/application/view/view_blog.php
<html>
<head>
<title>My Blog</title>
</head>
<body>
<h1>My Blog</h1>
<?foreach($articles as $article):?>
<h3><?=$article?></h3>
<?endforeach?>
</body>
</html>
/application/view/view_blog_add.php
<html>
<head>
<title>My Blog</title>
</head>
<body>
<h1>My Blog</h1>
<h3>Title:</h3>
<input type="text" value="<?=$title?>">
</body>
</html>
Dan terakhir, kita mempunyai 2 view seperti yang dibicarakan sebelumnya. Hasilnya akan menampilkan
'hasil' akhir, dalam HTML tentunya..
----------------------------
6. Iseng2 by : cahya dsn
Created date : 2013-01-07
7. Iseng2 by : cahya dsn
Created date : 2013-01-07