Think Different [vokasi] Materi Pem. Web + Kisi UAS 12_MVC pada PHP
MVC Pada PHP
Aryo Pinandito, ST, M.MT Fajar Pradana, S.ST, M.Eng Issa Arwani, S.Kom, M.Sc1. PENDAHULUAN 1.1 Pengantar 1.2 Tujuan 1.3 Definisi
2. Penerapan MVC pada PHP 2.1. Layer controller 2.2. Layer model 2.3. Layer view
3. MVC pada framework PHP
1. PENDAHULUAN
1.1 Pengantar
OOP (Object Oriented Programming) atau Pemorgraman Berbasis Objek telah berkembang pesat selaras dengan perkembangan PHP versi 5. Perkembangan PHP ke arah OOP mendorong perancangan web dengan php kearah model arsitektur MVC. Saat ini, arsitektur MVC adalah pola yang paling banyak digunakan untuk aplikasi web. Model ini yang awalnya digunakan untuk pertama kalinya di Smalltalk dan kemudian diadopsi dan dipopulerkan oleh
Java, saat ini ada lebih dari selusin kerangka (framework) web PHP berdasarkan pola MVC.
Model-View-Controller atau MVC adalah sebuah metode untuk membuat sebuah aplikasi dengan memisahkan data (Model) dari tampilan (View) dan cara bagaimana memprosesnya (Controller). Dalam implementasinya kebanyakan framework dalam aplikasi website adalah berbasis arsitektur MVC. MVC memisahkan pengembangan aplikasi berdasarkan komponen utama yang membangun sebuah aplikasi seperti manipulasi data, antarmuka pengguna, dan bagian yang menjadi kontrol dalam sebuah aplikasi web.
1.2 Tujuan
Penguasaan materi dalam modul ini dirancang agar mahasiswa mampu untuk : Menjelaskan dan memahami tentang definisi dan konsep penerapan
arsitektur MVC pada PHP.
Penerapan masing-masing layer arsitektur MVC pada layer dengan contoh studi kasus.
Menjelaskan dan memahami beberapa framework MVC dengan PHP.
Halaman 1
MODUL
12
SEL
F-PR
OP
AG
ATI
NG
EN
TRE
PR
EN
EU
RIA
L
ED
UC
ATI
ON
DE
VEL
OP
ME
NT
(2)
1.3 Konsep penerapan arsitektur MVC pada web
Ada beberapa model penerapan Arsitektur MVC dalam perancangan aplikasi berbasis web. Model yang paling sederhana adalah model server side MVC. Model ini biasa terjadi pada aplikasi web tradisional, yang tidak melibatkan client side seperti Javascript, Java applet, flash
dan lain-lain. Server Side MVC menyerahkan keseluruhan proses bisnis pada server, aplikasi pada sisi pengguna hanya dapat menerima. MVC jenis ini kadang-kadang disebut juga dengan nama thin client.
Gambar 12.1 Arsitektur MVC client-server
Php merupakan salah satu bahasa pemrograman yang banyak digunakan untuk mengembangkan web bisa kita terapkan dalam model server side MVC. Secara umum tetap ada tiga layer yang akan dirancang yaitu;
1. Model mewakili struktur data. Biasanya model berisi fungsi-fungsi yang membantu seseorang dalam pengelolaan basis data seperti memasukkan data ke basis data, pembaruan data dan lain-lain.
2. View adalah bagian yang mengatur tampilan ke pengguna. Bisa di katakan berupa halaman web atau dalam pemrograman kita kenal dengan halaman tempat interaksi antara manusia dan komputer (User Interface).
3. Controller merupakan bagian yang menjembatani model dan view. Controller berisi perintah-perintah yang berfungsi untuk memproses suatu data dan mengirimkannya ke halaman web.
Gambar 12.2 Proses MVC
Dalam Sequence Diagram MVC berikut dapat diamati aliran data selama permintaan.
Brawijaya University 2012
Pemrograman Web / MVC pada PHP
(3)
Gambar 12.3 Sequence Diagram MVC
2. Penerapan Arsitektur MVC pada PHP
Misal kita ingin membuat aplikasi web sederhana tentang data buku. Perancangan untuk kasus ini akan kita gunakan arsitektur MVC dengan php. Contoh aplikasi singkat ini memiliki struktur yang sederhana, menempatkan setiap modul MVC dalam satu folder:
Gambar 12.4 Struktur direktori Arsitektur MVC
2.1 Controller
Controller di sini berperan sebagai logic aspect dari suatu aplikasi / mengatur user flow. Controller akan merespon setiap inputan dari user
dengan melakukan pemanggilan terhadap model dan view yang sesuai sehingga request / permintaan dari user tersebut dapat terpenuhi dengan baik.
Kelas Controller yang kita rancang hanya memiliki satu fungsi dan konstruktor. Konstruktor akan membuat objek dari kelas model. Sesuai dengan diagram sequence diatas, ketika permintaan dilakukan, controller
memutuskan data yang diperlukan dari model. Kemudian memanggil kelas
model untuk mengambil data. Kode ini sangat sederhana. Perhatikan Halaman 3
(4)
bahwa controller tidak tahu apa-apa tentang database atau tentang bagaimana halaman yang akan dihasilkan. Berikut cohtoh dari kelas
controller yang dibuat.
include_once("model/Model.php"); class Controller {
public $model;
public function __construct() {
$this>model = new Model(); }
public function invoke() {
if (!isset($_GET['book'])) {
// no special book is requested, we'll show a list of all available books
$books = $this>model>getBookList(); include 'view/booklist.php';
} else {
// show the requested book
$book = $this>model>getBook($_GET['book']); include 'view/viewbook.php';
} } }
Untuk memanggil kelas controller, kita akan membuat file index.php. // index.php file
include_once("controller/Controller.php"); $controller = new Controller();
$controller>invoke();
2.2 Model dan Entity Class
Pola arsitektur MVC memiliki layer yang disebut dengan Model yang merepresentasikan data yang digunakan oleh aplikasi sebagaimana proses bisnis yang diasosiasikan terhadapnya. Model mewakili struktur data. Biasanya model berisi fungsi-fungsi yang membantu seseorang dalam pengelolaan basis data seperti memasukkan data ke basis data, pembaruan data dan lain-lain. Setiap kali method / function dari suatu aplikasi butuh untuk melakukan akses ke dalam suatu data, maka function / method tersebut tidak langsung berinteaksi dengan sumber data
(5)
tersebut melainkan harus melalui model terlebih dahulu. Dalam hal ini hanya model yang diijinkan untuk berinteraksi langsung dengan sumber data. Secara singkat, layer model ini menangani content dari aplikasi. Dalam contoh ini kita membuat model yang diwakili oleh 2 kelas: kelas "Model" dan kelas "Buku". Kelas "Buku" adalah kelas entitas. Kelas ini yang nantinya akan kita lempar ke view yang merupakan representasi data yang ada di model yang diambil dari database.
Contoh class model:
include_once("model/Book.php"); class Model {
public function getBookList() {
// here goes some hardcoded values to simulate the database return array(
"Jungle Book" => new Book("Jungle Book", "R. Kipling", "A classic book."),
"Moonwalker" => new Book("Moonwalker", "J. Walker", ""), "PHP for Dummies" => new Book("PHP for Dummies", "Some Smart Guy", "")
); }
public function getBook($title) {
// we use the previous function to get all the books and then we return the requested one.
// in a real life scenario this will be done through a db select command
$allBooks = $this>getBookList(); return $allBooks[$title];
} }
Contoh class Buku:
class Book {
public $title; public $author; public $description;
public function __construct($title, $author, $description)
{
$this>title = $title; $this>author = $author;
(6)
$this>description = $description; }
}
2.3 View (presentation)
View atau layer presentasi bertanggung jawab untuk pemformatan data yang diterima dari model dalam sebuah bentuk yang bisa diakses kepada pengguna. Sebisa mungkin, didalam View tidak berisi logika-logika kode tetapi hanya berisi variabel-variabel yang berisi data yang siap ditampilkan. Di dalam view jangan pernah ada kode untuk melakukan koneksi ke basis data. View hanya dikhususkan untuk menampilkan data-data hasil dari model dan controller.
Dalam contoh yang dipakai, ada dua view yang ditampilkan, satu untuk menampilkan satu buku dan yang lainnya untuk menampilkan sebuah daftar buku.
Contoh viewbook.php <html>
<head></head> <body>
<?php
echo 'Title:' . $book>title . '<br/>'; echo 'Author:' . $book>author . '<br/>';
echo 'Description:' . $book>description . '<br/>'; ?>
</body> </html>
Contoh booklist.php
<html>
<head></head> <body>
<table>
<tbody><tr><td>Title</td><td>Author</td><td>Description</td></ tr></tbody>
<?php
foreach ($books as $title => $book) {
(7)
echo '<tr><td><a href="index.php?book='.$book >title.'">'.
$book>title.'</a></td><td>'.$book >author.'</td><td>'.
$book>description.'</td></tr>'; }
?> </table> </body> </html>
3. Arsitektur MVC pada framework PHP
Framework adalah sekumpulan fungsi, class, dan aturan-aturan. Berbeda dengan library yang sifatnya untuk tujuan tertentu saja, framework
bersifat menyeluruh mengatur bagaimana kita membangun aplikasi.
Framework memungkinkan kita membangun aplikasi dengan lebih cepat karena sebagai developer kita akan lebih memfokuskan pada pokok permasalahan sedangkan hal-hal penunjang lainnya seperti koneksi database, form validation, GUI, dan security; umumnya telah disediakan oleh framework. Disamping itu dengan aturan-aturan yang jelas dan harus dipatuhi, aplikasi kita lebih solid, more readable, dan kolabarasi dalam tim dapat lebih mudah dilaksanakan.
Kita sebagai seorang software developer bisa dianalogikan sebagai seorang tukang bangunan. Apabila anda perhatikan, seorang tukang bangunan bisa membuat sebuah rumah. Tidak akan menjadi masalah bila hanya untuk membangun rumah dengan satu atau dua lantai. Tetapi akan menjadi masalah apabila dia mendapatkan pekerjaan untuk membangun sebuah gedung bertingkat. Permasalahan akan menjadi semakin komplek, makin banyak pekerja dan material yang dilibatkan, belum lagi dengan jadwal yang ketat. Kita pun seperti itu. Membangun aplikasi kecil tentu tidak menjadi masalah. Namun bagaimana bagaimana apabila aplikasi kecil kita tersebut dengan makin lama makin bertambah requirementnya sejalan dengan kebutuhan user. Di sini lah peran penting sebuah framework dalam membangun aplikasi.
(8)
Gambar 12.5 Framework PHP yang menetapkan pola MVC Contoh Framework MVC pada PHP :
CakePHP yang bersifat open source ini juga mengadopsi konsep arsitektur MVC (Model View Controller) dan ORM (Object Relational Mapping), yang mendukung JavaScript, AJAX, RSS, Email dan XML yang sudah terintegrasi dalam core library-nya. Aplikasi ini bisa dijalankan di PHP4 maupun PHP5, serta mendukung berbagai
database populer seperti MySQL, SQLite, PostSQL, Oracle, MS SQL, dan DB 2. Dengan menggunakan modul tambahan seperti Security, Session, Access Control List (memungkinkan pengaturan user dan hak aksesnya dalam aplikasi yang kita kembangkan dengan sarana yang lebih mudah dipahami), Authentication memungkinkan kita membangun aplikasi dengan cepat dan mudah, serta Scaffolding
(fitur yang barangkali jarang dijumpai pada framework lain, fitur ini bisa mengenerate semua yang dibutuhkan untuk membuat aplikasi (create, read, update, delete) secara lengkap). Kekurangannya adalah pada bagian dokumentasi, dokumentasi yang disediakan kurang begitu bagus namun sudah lengkap. Struktur kerja MVC pada CakePHP yaitu, user melakukan request yang ditangani oleh
Controller, Controller memiliki banyak metode untuk menangani
request tersebut. Controller mengambil data pada database melalui
Model, Model tersebut memberikan data yang relevan ke dalam
Controller. Controller akan mengolah data dan memberikannya pada View (tampilan yang dipilih). View ini yang akan dilihat oleh
browser-nya.
Zend Framework merupakan pustaka berbasis PHP5 yang menggunakan arsitektur pemrograman Model-View-Controller
(MVC). Zend Framework dikembangkan oleh perorangan dari
developer yang berpengalaman dalam menangani aspek – aspek dari OOP yang lebih kompleks, lebih fleksibel untuk masalah hierarki direktori, lebih mudah digunakan dan dikembangkan karena tidak harus dipelajari semua untuk memakai sebagian saja. Fokus dari Zend Framework adalah untuk membangun aplikasi web 2.0 dan untuk memudahkan dalam mengakses API dari berbagai vendor seperti Google, Yahoo!, Flickr dan Amazon. Modul yang digunakan sangat spesifik untuk web 2.0 saja, seperti AJAX, Syndication, Web Services dan Search.
(9)
Symfony Project merupakan framework yang ditujukan untuk PHP5, serta menganut Model MVC. Dukungan AJAX juga tersedia, dokumentasi cukup baik serta kompatibel terhadap berbagai sistem
database. Kekurangan dari Symfony adalah proses instalasi dan konfigurasi yang cukup rumit.
Canvas (web framework) merupakan web aplikasi framework yang bersifat open source, dapat dijalankan pada PHP 5, dapat mendukung konsep ORM, serta menganut Model View Controller. Menggunakan MySQL sebagai default database relasionalnya dan Smarty sebagai default template sistemnya, tapi tetap memungkinkan untuk menggunakan database dan template sistem yang lainnya.
CodeIgniter juga mendukung PHP4 dan PHP5, mengadopsi arsitektur MVC namun tidak mendukung konsep ORM. Modul siap pakai yang disediakan seperti Session Management, Email Sending, Image Manipulation Library, File Uploading, XML-RPC, Calendaring. Berbeda dengan CakePHP, CodeIgniter ini tersedia dokumentasi yang sangat banyak dan terorganisir dengan baik.
Prado merupakan framework yang berbasis komponen dan Event-Driven, dengan konsep yang mirip seperti pemrograman di ASP.Net dan Delphi yang mendukung pemakaian database populer. Komponen di Prado merupakan gabungan dari file spesifikasi dalam format XML, template HTML dan PHP class. Kekurangan dari Prado sendiri, hanya mendukung PHP 5 saja.
(10)
REFERENSI
Wikipedia (http://wikipedia.org/wiki/Model-View-Controller)
J. Deitel, Paul. 2007, Java How To Program, 6th Edition, Prentice Hall.
Matt Zandstra, 2010, PHP Objects, Patters and Practice, 3rd Edition, Apress.
PROPAGASI
A. Latihan dan Diskusi (Propagasi Vertikal dan Horizontal)
1. Jelaskan konsep arsitektur MVC pada web.
2. Jelaskan bagaimana php bisa diterapkan menggunakan konsep arsitektur MVC. 3. Apa yang dimaksud dengan framework?
4. Jelaskan keuntungan jika membuat aplikasi berdasarkan framework.
5. Berikan contoh beberapa framework menggunakan php selain yang ada dalam modul ini.
A. Tugas (Evaluasi mandiri)
1. Implementasikan contoh kode MVC dengan PHP yang ada pada bab 12 di modul ini.
2. Implementasikan aplikasi yang dirancang dengan arsitektur MVC pada modul sebelumnya (modul 11) menggunakan PHP.
(1)
tersebut melainkan harus melalui model terlebih dahulu. Dalam hal ini hanya model yang diijinkan untuk berinteraksi langsung dengan sumber data. Secara singkat, layer model ini menangani content dari aplikasi. Dalam contoh ini kita membuat model yang diwakili oleh 2 kelas: kelas "Model" dan kelas "Buku". Kelas "Buku" adalah kelas entitas. Kelas ini yang nantinya akan kita lempar ke view yang merupakan representasi data yang ada di model yang diambil dari database.
Contoh class model:
include_once("model/Book.php"); class Model {
public function getBookList() {
// here goes some hardcoded values to simulate the database return array(
"Jungle Book" => new Book("Jungle Book", "R. Kipling", "A classic book."),
"Moonwalker" => new Book("Moonwalker", "J. Walker", ""), "PHP for Dummies" => new Book("PHP for Dummies", "Some Smart Guy", "")
); }
public function getBook($title) {
// we use the previous function to get all the books and then we return the requested one.
// in a real life scenario this will be done through a db select command
$allBooks = $this>getBookList(); return $allBooks[$title];
} }
Contoh class Buku: class Book {
public $title; public $author; public $description;
public function __construct($title, $author, $description)
{
$this>title = $title; $this>author = $author;
(2)
$this>description = $description; }
}
2.3 View (presentation)
View atau layer presentasi bertanggung jawab untuk pemformatan data yang diterima dari model dalam sebuah bentuk yang bisa diakses kepada pengguna. Sebisa mungkin, didalam View tidak berisi logika-logika kode tetapi hanya berisi variabel-variabel yang berisi data yang siap ditampilkan. Di dalam view jangan pernah ada kode untuk melakukan koneksi ke basis data. View hanya dikhususkan untuk menampilkan data-data hasil dari model dan controller.
Dalam contoh yang dipakai, ada dua view yang ditampilkan, satu untuk menampilkan satu buku dan yang lainnya untuk menampilkan sebuah daftar buku.
Contoh viewbook.php <html>
<head></head> <body>
<?php
echo 'Title:' . $book>title . '<br/>'; echo 'Author:' . $book>author . '<br/>';
echo 'Description:' . $book>description . '<br/>'; ?>
</body> </html>
Contoh booklist.php <html>
(3)
echo '<tr><td><a href="index.php?book='.$book >title.'">'.
$book>title.'</a></td><td>'.$book >author.'</td><td>'.
$book>description.'</td></tr>'; }
?> </table> </body> </html>
3. Arsitektur MVC pada framework PHP
Framework adalah sekumpulan fungsi, class, dan aturan-aturan. Berbeda dengan library yang sifatnya untuk tujuan tertentu saja, framework bersifat menyeluruh mengatur bagaimana kita membangun aplikasi. Framework memungkinkan kita membangun aplikasi dengan lebih cepat karena sebagai developer kita akan lebih memfokuskan pada pokok permasalahan sedangkan hal-hal penunjang lainnya seperti koneksi database, form validation, GUI, dan security; umumnya telah disediakan oleh framework. Disamping itu dengan aturan-aturan yang jelas dan harus dipatuhi, aplikasi kita lebih solid, more readable, dan kolabarasi dalam tim dapat lebih mudah dilaksanakan.
Kita sebagai seorang software developer bisa dianalogikan sebagai seorang tukang bangunan. Apabila anda perhatikan, seorang tukang bangunan bisa membuat sebuah rumah. Tidak akan menjadi masalah bila hanya untuk membangun rumah dengan satu atau dua lantai. Tetapi akan menjadi masalah apabila dia mendapatkan pekerjaan untuk membangun sebuah gedung bertingkat. Permasalahan akan menjadi semakin komplek, makin banyak pekerja dan material yang dilibatkan, belum lagi dengan jadwal yang ketat. Kita pun seperti itu. Membangun aplikasi kecil tentu tidak menjadi masalah. Namun bagaimana bagaimana apabila aplikasi kecil kita tersebut dengan makin lama makin bertambah requirementnya sejalan dengan kebutuhan user. Di sini lah peran penting sebuah framework dalam membangun aplikasi.
(4)
Gambar 12.5 Framework PHP yang menetapkan pola MVC Contoh Framework MVC pada PHP :
CakePHP yang bersifat open source ini juga mengadopsi konsep arsitektur MVC (Model View Controller) dan ORM (Object Relational Mapping), yang mendukung JavaScript, AJAX, RSS, Email dan XML yang sudah terintegrasi dalam core library-nya. Aplikasi ini bisa dijalankan di PHP4 maupun PHP5, serta mendukung berbagai database populer seperti MySQL, SQLite, PostSQL, Oracle, MS SQL, dan DB 2. Dengan menggunakan modul tambahan seperti Security, Session, Access Control List (memungkinkan pengaturan user dan hak aksesnya dalam aplikasi yang kita kembangkan dengan sarana yang lebih mudah dipahami), Authentication memungkinkan kita membangun aplikasi dengan cepat dan mudah, serta Scaffolding (fitur yang barangkali jarang dijumpai pada framework lain, fitur ini bisa mengenerate semua yang dibutuhkan untuk membuat aplikasi (create, read, update, delete) secara lengkap). Kekurangannya adalah pada bagian dokumentasi, dokumentasi yang disediakan kurang begitu bagus namun sudah lengkap. Struktur kerja MVC pada CakePHP yaitu, user melakukan request yang ditangani oleh Controller, Controller memiliki banyak metode untuk menangani request tersebut. Controller mengambil data pada database melalui Model, Model tersebut memberikan data yang relevan ke dalam Controller. Controller akan mengolah data dan memberikannya pada View (tampilan yang dipilih). View ini yang akan dilihat oleh browser-nya.
Zend Framework merupakan pustaka berbasis PHP5 yang menggunakan arsitektur pemrograman Model-View-Controller (MVC). Zend Framework dikembangkan oleh perorangan dari
(5)
Symfony Project merupakan framework yang ditujukan untuk PHP5, serta menganut Model MVC. Dukungan AJAX juga tersedia, dokumentasi cukup baik serta kompatibel terhadap berbagai sistem database. Kekurangan dari Symfony adalah proses instalasi dan konfigurasi yang cukup rumit.
Canvas (web framework) merupakan web aplikasi framework yang bersifat open source, dapat dijalankan pada PHP 5, dapat mendukung konsep ORM, serta menganut Model View Controller. Menggunakan MySQL sebagai default database relasionalnya dan Smarty sebagai default template sistemnya, tapi tetap memungkinkan untuk menggunakan database dan template sistem yang lainnya.
CodeIgniter juga mendukung PHP4 dan PHP5, mengadopsi arsitektur MVC namun tidak mendukung konsep ORM. Modul siap pakai yang disediakan seperti Session Management, Email Sending, Image Manipulation Library, File Uploading, XML-RPC, Calendaring. Berbeda dengan CakePHP, CodeIgniter ini tersedia dokumentasi yang sangat banyak dan terorganisir dengan baik.
Prado merupakan framework yang berbasis komponen dan Event-Driven, dengan konsep yang mirip seperti pemrograman di ASP.Net dan Delphi yang mendukung pemakaian database populer. Komponen di Prado merupakan gabungan dari file spesifikasi dalam format XML, template HTML dan PHP class. Kekurangan dari Prado sendiri, hanya mendukung PHP 5 saja.
(6)
REFERENSI
Wikipedia (http://wikipedia.org/wiki/ Model-View-Controller)
J. Deitel, Paul. 2007, Java How To Program, 6th Edition, Prentice Hall.
Matt Zandstra, 2010, PHP Objects, Patters and Practice, 3rd Edition, Apress.
PROPAGASI
A. Latihan dan Diskusi (Propagasi Vertikal dan Horizontal) 1. Jelaskan konsep arsitektur MVC pada web.
2. Jelaskan bagaimana php bisa diterapkan menggunakan konsep arsitektur MVC. 3. Apa yang dimaksud dengan framework?
4. Jelaskan keuntungan jika membuat aplikasi berdasarkan framework.
5. Berikan contoh beberapa framework menggunakan php selain yang ada dalam modul ini.
A. Tugas (Evaluasi mandiri)
1. Implementasikan contoh kode MVC dengan PHP yang ada pada bab 12 di modul ini.
2. Implementasikan aplikasi yang dirancang dengan arsitektur MVC pada modul sebelumnya (modul 11) menggunakan PHP.