Pada tutorial ini kita akan mempelajari salah satu framework PHP populer di dunia, yaitu Cakephp, yang mana situsnya dapat kamu kunjungi di cakephp.org.

Tutorial CakePHP Dasar Part I

Update: 17 Mei 2014

Inilah tutorial pertama yang ada dalam situs Jagocoding.com. Ya, selama 2 bulan pengembangan situs mulai dari analisis, desain, dan coding akhirnya  kami bisa meluncurkan juga situs ini. Untuk mendapatkan berita apapun tentang Jagocoding.com, kamu boleh buka http://blog.jagocoding.com, semua berita tentang Jagocoding.com dapat dilihat di sana.

Pada tutorial pertama ini saya suguhkan tutorial dasar untuk mempelajari salah satu framework populer di dunia PHP, yaitu Cakephp, yang mana situsnya dapat kamu kunjungi di cakephp.org. Jika dulu di harian.cheyuz.com sebelumnya saya sering membuat tutorial tentang Codeigniter, kali ini di sini saya akan buat tutorial framework lain. Yah kita jangan mempelajari sesuatu itu hanya satu, karena ilmu tentang bahasa pemrograman itu sangat luas jadi alangkah baiknya kita mempelajari ilmu yang lain juga.

Silakan pelajari tutorial ini dengan sebaik-baiknya, berhubung tutorial Cakephp itu publikasi dokumentasinya sangat sedikit (mungkin di Indonesia) jadi saya di sini akan mengupas tuntas tutorial mulai dari tahap instalasi hingga menjadi sebuah aplikasi, tentunya aplikasi dasar ya masih berupa CRUD, yang nantinya kita kembangkan menjadi aplikasi yang luar biasa, hehehe.. Nah, aplikasi yang akan kita buat adalah aplikasi blog. Nah lho, pertanyaannya kenapa setiap tutorial framework pasti membuat aplikasi blog? soalnya membuat blog itu cukup mewakili kasus CRUD dan juga proses lainnya. Blog yang akan kita buat juga terdapat kategori, excerpt, dan slug. Jadi, nanti kita akan belajar banyak bagaimana membuat blog yang sederhana.

OK, kita lanjut ke tutorial.

Instalasi

Untuk server, kita gunakan XAMPP dan diasumsikan bahwa OS yang digunakan adalah Windows, bukan Linux (berhubung kebanyakan memakai Windows). Kemudian install XAMPP di C:\, jadi diasumsikan juga bahwa folder htdocs itu terdapat di path C:\xampp\htdocs\. Untuk tahap pertama adalah download framework Cakephp terbaru di sini:

https://github.com/cakephp/cakephp/zipball/2.5.0

kemudian, setelah itu file zip tersebut diextract ke C:\xampp\htdocs\ dan ganti folder cakephp-cakephp-xxxxxxx menjadi nama aplikasi kamu, misalnya blogku

Kemudian, setelah itu kamu akan melihat warning/notice berikut ini:

Notice (1024): Please change the value of 'Security.salt' in app/Config/core.php to a salt value specific to your application [CORE\Cake\Utility\Debugger.php, line 851]

Notice (1024): Please change the value of 'Security.cipherSeed' in app/Config/core.php to a numeric (digits only) seed value specific to your application [CORE\Cake\Utility\Debugger.php, line 855]

Jangan khawatir, itu normal kok hehe... itu menandakan Security.salt belum kita setting di file app/Config/core.php, silakan ubah security salt dan security cipherseed di file C:\xampp\htdocs\blogku\app\Config\core.php.

Kemudian pengecekan lainnya yang dilakukan oleh Cakephp adalah versi PHP kamu, pastikan versi PHP kamu adalah PHP 5 atau lebih tinggi, soalnya Cakephp tidak mendukung PHP 4. Setelah itu, pengecekan lainnya adalah folder tmp pastikan writtable. Dan pengecekan terakhir adalah database. Akan ada tulisan seperti ini berlatar belakang kuning:

Your database configuration file is NOT present. Rename APP/Config/database.php.default to APP/Config/database.php

Cakephp menyuruh kita supaya menghilangkan ekstensi .default pada file /blogku/app/Config/database.php.default menjadi database.php supaya Cakephp dapat mengakses database kita. Dan jangan lupa edit file database.php menjadi seperti berikut ini:

<?php
...
...

class DATABASE_CONFIG {

  public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => '',
    'database' => 'db_blog',
    'prefix' => '',
    //'encoding' => 'utf8',
  );

  public $test = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => '',
    'database' => 'db_blog',
    'prefix' => '',
    //'encoding' => 'utf8',
  );
}
?>

Diasumsikan bahwa nama database yang akan kita buat nanti bernama db_blog, username root, dan password kosong (default XAMPP).

Database

OK silakan buat database di mysql kamu dengan nama database db_blog dan execute SQL berikut pada mySQL kamu:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

CREATE TABLE IF NOT EXISTS `artikel` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`judul` varchar(125) NOT NULL,
`slug` varchar(125) NOT NULL,
`konten` text NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

INSERT INTO `artikel` (`id`, `judul`, `slug`, `konten`, `created`, `modified`) VALUES
(1, '7 Jenis Makanan yang Baik untuk Kesehatan', '', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc sagittis pharetra urna ac hendrerit. Sed posuere consequat metus vestibulum interdum. Quisque vitae ullamcorper sapien.', '2012-05-02 20:29:27', '0000-00-00 00:00:00'),
(2, '20 Binatang Super Aneh', '', 'Nunc lacinia magna velit, eget luctus ligula. Vestibulum at elementum metus. Praesent sodales, nunc nec ullamcorper accumsan, ipsum tellus malesuada nunc, vel commodo tortor massa ut nibh.', '2012-05-02 20:29:27', '0000-00-00 00:00:00'),
(3, '10 Makanan Tidak Sehat', '', 'Aenean nec justo nec lectus imperdiet elementum quis ac sem. Phasellus augue mi, auctor quis elementum a, tincidunt in nulla. Donec feugiat arcu et mi dignissim lobortis.', '2012-05-02 20:30:59', '0000-00-00 00:00:00');

Maka sekarang terdapat satu table yaitu artikel. Karena masih basic, untuk sementara kita bekerja dengan satu tabel terlebih dahulu, jangan dulu memakai kategori. Nanti di tutorial bagian berikutnya kita akan bekerja dengan relasi model, yaitu dengan model kategori yang nanti akan kita buat. Berikut ini adalah bentuk struktur tabel artikel.

FieldType
id INT
judul VARCHAR( 125 )
slug VARCHAR( 125 )
konten TEXT
created TIMESTAMP
modified TIMESTAMP

Setting MVC di CakePHP

Ok sekarang kita akan belajar bagaimana cara membuat Controller, View, dan Model yang akan kita pakai dengan menggunakan CakePHP. Jika kamu sudah terbiasa menggunakan framework, tentu sudah tidak asing lagi mendengar istilah-istilah tersebut.

Pertama, kita buat Model terlebih dahulu. Sebelumnya, perhatikan aturan-aturan penamaan pada CakePHP. Secara default, penamaan tabel di CakePHP menggunakan bahasa Inggris dan harus plural. Tetapi karena kita menggunakan ejaan bahasa Indonesia, kita akan menggunakan variable-variable yang kita definisikan. Secara aturan, nama model adalah sama dengan (=) nama table tetapi tidak plural (single). Misalnya, nama tabel adalah articles, maka nama model adalah Article. Tetapi, kita tidak terpaku harus mematuhi aturan tersebut. Karena tabel kita bahasa Indonesia (artikel), maka kita abaikan aturan tersebut dan memakai variable namanya $useTable.

Kita buat model yang bernama Artikel.php di dalam direktori /app/Model/. Isi dari file Artikel.php adalah:

<?php

class Artikel extends AppModel
{
  public $useTable = 'artikel';
}

Kita menggunakan $useTable karena kita tidak memakai aturan default, jika tidak maka kita harus membuat table yang namanya "artikels", dan itu tidak wajar karena berbahasa Indonesia.

Setiap field id secara default akan menjadi Primary Key, tetapi kita bisa menentukan sendiri jika primary key kita bukan id, misalnya id_artikel, maka tinggal menambahkan public $primaryKey = 'id_artikel'. Pada kasus ini, kita tidak perlu menambahkan variable tersebut karena primary key sudah bernama "id".

Ok, membuat model sudah selesai, walaupun belum sempurna. Kita belum menambahkan validasi dan relasi terhadap model lain. Nanti di tutorial berikutnya akan kita lakukan pengembangan dari model ini.

Setelah model dibuat, selanjutnya buatlah Controller.

Kita buat controller yang bernama ArtikelController.php di dalam direktori /app/Controller/. Isi dari file ArtikelController.php adalah:

<?php

class ArtikelController extends AppController
{

  public $uses = array('Artikel');

  function index()
  {
    
  }

}

Kita sudah membuat controller bernama 'artikel' dan function index. Jika kamu ingin mengecek apakah controller dan model sudah bisa diakses, silakan buka di browser kamu: http://localhost/blogku/artikel/index atau http://localhost/blogku/artikel (sama saja). Struktur url yang ada pada CakePHP adalah: http://[nama_aplikasi]/[controller]/[action]/[parameter1]/[parameter2]/[parameter3]/... Jika kita buka, maka akan keluar pesan sebagai berikut:

"The view for ArtikelController::index() was not found."

Berarti kita belum membuat view untuk controller tersebut. Ayo kita buat viewnya! Caranya adalah dengan membuat direktori Artikel dan membuat file index.ctp ke dalam direktori /app/View/Artikel/. Secara default, nama view harus sama dengan nama function, jadi kita buat namanya index.ctp. Nama direktori harus sama dengan nama Controller. Isikan kode html sebagai berikut:

<h1>Data Artikel</h1>

Jika sudah, silakan direfresh halaman yang tadi. Kini keluar tulisan heading 1 "Data Artikel". Selamat, Kamu berhasil membuat MVC sederhana dengan menggunakan CakePHP. Sekarang, ayo kita tampilkan data di dalam table artikel.

Menampilkan Data

Kode untuk mengambil semua data sangat mudah dengan menggunakan CakePHP, cukup dengan memanggil function find('all'). Buka file /app/Controller/ArtikelController.php dan tambahkan kode php untuk mengambil semua data.

<?php

class ArtikelController extends AppController
{

  public $uses = array('Artikel');

  function index()
  {
    $artikel = $this->Artikel->find('all');
    $this->set('artikel', $artikel);
  }

}

Kita mengisikan hasil seleksi data untuk tabel artikel ke dalam variable $artikel, yang selanjutnya set variable $artikel untuk bisa diakses di view. $this->set() adalah function bawaan CakePHP untuk mengeset variable yang ada di view dari controller.

Untuk menampilkan data di View, ubah file /app/View/Artikel/index.ctp tadi menjadi sebagai berikut:

<h1>Data Artikel</h1>

<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>Judul</th>
      <th>Konten</th>
      <th>Tanggal Dibuat</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($artikel as $a): ?>
      <tr>
        <td><?php echo $a['Artikel']['id'] ?></td>
        <td><?php echo $a['Artikel']['judul'] ?></td>
        <td><?php echo $a['Artikel']['konten'] ?></td>
        <td><?php echo $a['Artikel']['created'] ?></td>
      </tr>
    <?php endforeach ?>
  </tbody>
</table>
<?php debug($artikel) ?>

Jreng jreng, data yang ada di dalam tabel artikel muncul semua, hehe..
variable $artikel kini menjadi sebuah array yang bentuknya adalah:

array(
    0 => array(
  'Artikel' => array(
      'id' => '1',
      'judul' => '7 Jenis Makanan yang Baik untuk Kesehatan',
      'slug' => '',
      'konten' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc sagittis pharetra urna ac hendrerit. Sed posuere consequat metus vestibulum interdum. Quisque vitae ullamcorper sapien.',
      'created' => '2012-05-02 20:29:27',
      'modified' => '0000-00-00 00:00:00'
  )
    ),
    1 => array(
  'Artikel' => array(
      'id' => '2',
      'judul' => '20 Binatang Super Aneh',
      'slug' => '',
      'konten' => 'Nunc lacinia magna velit, eget luctus ligula. Vestibulum at elementum metus. Praesent sodales, nunc nec ullamcorper accumsan, ipsum tellus malesuada nunc, vel commodo tortor massa ut nibh.',
      'created' => '2012-05-02 20:29:27',
      'modified' => '0000-00-00 00:00:00'
  )
    ),
    2 => array(
  'Artikel' => array(
      'id' => '3',
      'judul' => '10 Makanan Tidak Sehat',
      'slug' => '',
      'konten' => 'Aenean nec justo nec lectus imperdiet elementum quis ac sem. Phasellus augue mi, auctor quis elementum a, tincidunt in nulla. Donec feugiat arcu et mi dignissim lobortis.',
      'created' => '2012-05-02 20:30:59',
      'modified' => '0000-00-00 00:00:00'
  )
    )
);

Jadi untuk mengaksesnya dengan menggunakan foreach seperti tadi.

 

 

Cukup untuk tutorial kali ini, pada tutorial selanjutnya (Tutorial CakePHP Dasar Part II - Manipulasi Data CRUD) kita akan belajar untuk menambahkan data, mengubah, dan menghapus dengan menggunakan CakePHP.

 

Stand by with me,
Follow saya supaya kamu tetap berlangganan dengan artikel saya. 


About Author

Cecep Yusuf

Hi, my name is Cecep Yusuf. However, in the virtual world I am more likely to use the name Cheyuz, which is an abbreviation of two words "Cecep" and "Yusuf". I am founder of Jagocoding.com, u can view more of me in Cheyuz.com


Comment & Discussions

  • My brother recommended I might like this website. He was entirely right. This post actually made my day. You cann't imagine simply how much time I had spent for this information! Thanks!

  • At this time it appears like BlogEngine is the top blogging platform available right now. (from what I've read) Is that what you're using on your blog?

  • BInson
    mau tanya ya mas. aku sudah ikutin langkah dari awal.. notifikasinya sudah hijau semua. tetapi sudah input semua sampai akhir.. datanya ga keluar. masih saja di tampilan notifikasi di awal kelihatan hijau2 beberapa baris gitu seperti gini

    Release Notes for CakePHP 2.7.0-RC.

    Read the changelog

    Your version of PHP is 5.2.8 or higher.

    Your tmp directory is writable.

    The FileEngine is being used for core caching. To change the config edit APP/Config/core.php

    Your database configuration file is present.

    CakePHP is able to connect to the database.

    DebugKit plugin is present

    • Cecep Yusuf

      Oh mas Binson pasti belum buka URL ini: http://localhost/blogku/artikel/index atau http://localhost/blogku/artikel

      Harus dibuka dulu URL tersebut..
      Maaf belum ada keterangan harus buka URL tersebut hehe


  • tri wahyudi
    maaf mas mau tanya
    ketika saya buka URL http://localhost/blogku/artikel/index
    ada sesuatu seperti ini

    Fatal Error
    Error: syntax error, unexpected 'class' (T_CLASS)
    File: C:\xampp\htdocs\blogku\app\Controller\ArtikelController.php
    Line: 3

    Notice: If you want to customize this error message, create app\View\Errors\fatal_error.ctp

    • Cecep Yusuf

      mungkin ada kode yang kurang, silahkan dicek lagi


  • rusmawi
    Mas, setelah saya buat file index-nya kok list datanya gak keluar yak?
    Seolah-olah tidak ada di database. Di view-nya hanya ada header (nama kolom aja).

    Dan dibagian bawah view-nya ada:
    object(Cake\ORM\Query) {

    '(help)' => 'This is a Query object, to get the results execute or iterate it.',
    'sql' => 'SELECT Artikel.id AS `Artikel__id`, Artikel.judul AS `Artikel__judul`, Artikel.slug AS `Artikel__slug`, Artikel.konten AS `Artikel__konten`, Artikel.created AS `Artikel__created`, Artikel.modified AS `Artikel__modified` FROM artikel Artikel',
    'params' => [],
    'defaultTypes' => [
    'Artikel__id' => 'integer',
    'Artikel.id' => 'integer',
    'id' => 'integer',
    'Artikel__judul' => 'string',
    'Artikel.judul' => 'string',
    'judul' => 'string',
    'Artikel__slug' => 'string',
    'Artikel.slug' => 'string',
    'slug' => 'string',
    'Artikel__konten' => 'text',
    'Artikel.konten' => 'text',
    'konten' => 'text',
    'Artikel__created' => 'timestamp',
    'Artikel.created' => 'timestamp',
    'created' => 'timestamp',
    'Artikel__modified' => 'timestamp',
    'Artikel.modified' => 'timestamp',
    'modified' => 'timestamp'
    ],
    'decorators' => (int) 1,
    'executed' => true,
    'hydrate' => true,
    'buffered' => true,
    'formatters' => (int) 0,
    'mapReducers' => (int) 0,
    'contain' => [],
    'matching' => [],
    'extraOptions' => [],
    'repository' => object(Cake\ORM\Table) {

    'registryAlias' => 'Artikel',
    'table' => 'artikel',
    'alias' => 'Artikel',
    'entityClass' => '\Cake\ORM\Entity',
    'associations' => [],
    'behaviors' => [],
    'defaultConnection' => 'default',
    'connectionName' => 'default'

    }

    }

    Mohon petunjuknya, Mas. :)
    Thanks

  • Please LOGIN before if you want to give the comment.