ModelΒΆ

Mayoritas dari aplikasi web yang kita kembangkan akan berhubungan dengan data. Mungkin kita ingin menampilkan data, melakukan pengolahan data, ataupun menyimpan data. Data dapat saja disimpan dalam basis data seperti MySQL ataupun dalam bentuk lainnya, seperti file. Tidak penting apapun yang dilakukan dengan data dan media penyimpanannya, bagian Model akan bertanggung jawab menangani hal tersebut.

Sebagai contoh, kita akan membuat sebuah kelas sederhana untuk melakukan query ke basis data MySQL. Tentunya pada aplikasi web yang sebenarnya kita akan perlu tidak hanya Model untuk basis data, tetapi juga banyak Model lainnya, seperti model untuk data Session Cookies <http://php.net/manual/en/memcached.sessions.php> untuk status pengguna, Cache, dan lainnya. Prinsip dasar untuk implementasi model yang kita kembangkan dapat digunakan untuk bentuk data lain tersebut juga, hanya saja pengembangan harus dilakukan secara terpisah.

Tanpa banyak bicara lagi, kita akan langsung membuat kelas dasar untuk koneksi basis data, menggunakan PDO (PHP Data Objects) <http://www.php.net/manual/en/book.pdo.php>. Pertama-tama, buat file BaseModel.php yang disimpan dalam lib/MVC/Model. Seluruh kelas yang berhubungan dengan basis data akan mengimplementasikan kelas dasar ini nantinya. Berikut adalah isi dari BaseModel.php:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php

    namespace lib\MVC\Model;

    abstract class BaseModel {
        public static function getDB() {
            return new \PDO("mysql:host=localhost;dbname=framework",
                        "userframework", "password");
        }
    }

Ingat bahwa anda harus menggantikan seluruh parameter yang dikirimkan kepada PDO, sesuai dengan konfigurasi basis data anda. Silahkan baca dokumentasi PDO untuk melihat detil dari parameter konfigurasi yang ada.

Setelah membuat kelas BaseModel, kita dapat mengimplementasikan kelas tersebut sesuai dengan kebutuhan kita. Misalkan jika kita memiliki basis data pengguna seperti berikut:

Isi Tabel Pengguna

Isi Tabel Pengguna

Maka kita dapat membuat sebuah kelas Pengguna yang berfungsi khusus untuk melakukan query terhadap tabel Pengguna. Mari kita kembangkan kelas tersebut. Pertama-tama, buat sebuah file baru bernama Pengguna.php yang diletakkan di direktori baru juga, models. Direktori models ini berada dalam direktori utama kode, yaitu setingkat dengan views dan controllers. Isi dari Pengguna.php adalah seperti berikut:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php

    namespace models;

    use lib\MVC\Model\BaseModel;

    class Pengguna extends BaseModel {
        public $nama;
        public $email;

        public function __construct($nama, $email) {
            $this->nama = $nama;
            $this->email = $email;
        }

        public static function getPengguna() {
            $query = self::getDB()->prepare("SELECT * FROM `pengguna`");
            $query->execute();

            $result = array();
            while ($row = $query->fetch()) {
                array_push($result,
                       new Pengguna($row["nama"], $row["email"]));
            }

            return $result;
        }
    }

Pada dasarnya kelas Pengguna hanya berfungsi untuk menyimpan data pengguna, dengan satu fungsi statis, getPengguna(). Fungsi ini seperti namanya bertanggung jawab untuk mengambil seluruh data pengguna yang ada, dalam bentuk array dari kelas Pengguna. Kita kemudian dapat memanggil fungsi ini pada Controller, untuk kemudian dikirimkan kepada View. View lah yang kemudian akan menampilkan data, dalam bentuk apapun yang kita inginkan.

Misalkan jika kita ingin menmapilkan data pengguna dalam bentuk tabel, maka kita dapat melakukan hal berikut:

  1. Tambahkan kode untuk pengambilan data pada action dalam Controller yang relevan. Dalam contoh ini, kita akan menambahkan kode pada action Index() di dalam Controller “Home”. Edit fungsi Index() pada Controller “Home” menjadi seperti berikut (perhatikan juga bahwa kita menambahkan use models\Pengguna pada awal kode):
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
namespace controllers;

    use lib\MVC\Controller\BaseController;
    use models\Pengguna;

    class Home extends BaseController {
        protected function Index() {
            $viewModel = Pengguna::getPengguna();
            $this->RenderView($viewModel);
        }
}
  1. Ganti View yang relevan dengan logika untuk penampilan data. Karena data dikirimkan dalam bentuk array, kita dapat langsung melakukan iterasi dan menampilkan data tersebut dengan perintah echo. Gantikan isi Index.php yang ada di dalam views/Home menjadi seperti berikut:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<table class="table table-striped table-hover">
    <thead>
            <tr>
                <th>Nama Pengguna</th>
                <th>Email</th>
            </tr>
        </thead>

        <tbody>
        <?php foreach ($viewModel as $pengguna): ?>
            <tr>
                <td><?php echo $pengguna->nama ?></td>
                <td><?php echo $pengguna->email ?></td>
            </tr>
        <?php endforeach ?>
        </tbody>
    </table>

Sudah selesai. Cukup dengan dua langkah saja maka kita dapat menghasilkan tampilan seperti berikut:

Hasil Akhir Tampilan dengan Data dari Basis Data

Hasil Akhir Tampilan dengan Data dari Basis Data

Tentu saja implementasi yang kita buat sangat sederhana, dan masih perlu banyak pengembangan. Karena data merupakan hal yang sangat penting, disarankan untuk mengintegrasikan solusi data lengkap seperti Doctrine untuk mendapatkan fitur maksimal dengan resiko minimal. Ingat bahwa yang ingin diperlihatkan dari tulisan ini hanyalah konsep dasar untuk membangun framework dan garis besar cara kerjanya.

Note

Seluruh kode program sampai di titik ini dapat dilihat di repository Github kode.

Bagikan Tulisan
comments powered by Disqus
Kembali ke bertzzie.com