Authentication pada Cakephp

Authentifikasi user merupakan salah satu kebutuhan pokok dalam sebuah aplikasi web. Hampir setiap web dinamis mengimplementasikan fitur ini. Baik yang sudah multi level atau hanya satu level saja. Aplikasi CMS pun juga mengimplementasikan hal ini, baik wordpress, joomla, drupal. Authentifikasi ini berfungsi sebagai pengecek apakah seorang user berhak untuk mengakses fungsi atau halaman tertentu dari sebuah web. Sebagai contoh dalam wordpress tentunya anda tidak dapat masuk dalam dashboard admin apabila anda tidak login sebagai anda.

Nah, kali ini saya akan membahas tentang bagaimana implementasi Authentifikasi pada cakephp. Pada Cakephp authentifikasi di handle oleh 2 component yaitu Auth dan ACL. Dimana Auth sebagai fungsi pengeceknya, dan ACL sebagai konfigurasi list user dan function yang akan diakses.

Pertama kali kita akan membuat table sebagai contoh Auth. Kita akan membuat table users, groups, posts, dan comments.

CREATE TABLE users (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL UNIQUE,
    password CHAR(40) NOT NULL,
    group_id INT(11) NOT NULL,
    created DATETIME,
    modified DATETIME
);

CREATE TABLE groups (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    created DATETIME,
    modified DATETIME
);

CREATE TABLE posts (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INT(11) NOT NULL,
    title VARCHAR(255) NOT NULL,
    body TEXT,
    created DATETIME,
    modified DATETIME
);

CREATE TABLE comments (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    sender VARCHAR(100) NOT NULL,
    content TEXT,
    created DATETIME
);

Read More »

Posted in ACL, Auth | Tagged , , , | 5 Comments

Association Model Cakephp

Salah satu fitur terbaik yang ada pada cakephp adalah Relation mapping yang terdapat pada modelnya. Tujuannya adalah mempermudah untuk mengakses data-data yang berelasi satu dengan yang lain. Pada artikel ini akan saya bahas tentang bagaimana merelasikan antar object-object model dengan cara yang natural dan mudah dipahami.

Oke, sebelum memulai lebih jauh, seperti telah kita ketahui dalam basisdata terdapat 4 jenis relasi yaitu one to one, one to many, many to one dan many to many. Untuk lebih memahami perhatikan table dibawah ini.

Relasi Keyword pada Cakephp Contoh kasus
One to one hasOne Seorang user hanya memiliki satu profile
One to many hasMany Seorang user dapat memiliki lebih dari satu artikel
Many to one belongsTo Banyak artikel dimiliki oleh satu user
Many to many hasAndBelongsToMany Satu artikel dapat memiliki banyak tag dan satu tag dapat memiliki banyak artikel

Read More »

Posted in Concept, Model | Tagged , | 3 Comments

Pagination pada Cakephp

Pagination sering menjadi hambatan dalam pembuatan sebuah website. Kalau direnungkan hamper setiap aplikasi website sekarang ini mengimplementasikan Pagination. Implementasi pagination sendiri banyak tekniknya dan pada umumnya tidak mudah dilakukan untuk pemula. Cakephp sebagai sebuah framework mencoba menawarkan solusi untuk mempermudah proses implementasi Pagination, mengingat penting dan seringnya digunakan implementasi pagination dihampir setiap aplikasi website. Fitur yang ditawarkan juga beraneka ragam, mulai dari pagination sorting sampai dengan pagination. Pada artikel ini saya akan mencoba menunjukan konsep dasar implementasi pagination pada Cakephp.

Untuk mengimplemetasikan pagination perlu beberapa tambahan code, yaitu pada controller dan pada view. Pada controller berfungsi untuk mengambil data per page dan pada view untuk menampilkan data per page sekaligus navigation nya.

Langkah pertama pada controller kita tambahkan attribute $paginate yang merupakan konfigurasi dari pagination yang akan kita buat. Secara mudah strukturnya kurang lebih seperti beikut.

<?php
  class UsersController extends AppController{
      var $name = 'Users';
      var $paginate = array(
        'limit' => 5,
        'order' => array(
            'User.create' => 'asc'
        )
      );
}
?>

Kemudian pada function index (function yang akan kita implementasikan pagination) kita berikan code berikut

function index(){
          $users = $this->paginate('User');
          $this->set('users', $users);
      }

Pada view yaitu index.ctp, untuk menampilkan data yang sudah dipagination kita berikan code sebagai beikut

<table>
    <tr>
        <th><?php echo $this->Paginator->sort('Username', 'username'); ?></th>
        <th><?php echo $this->Paginator->sort('Email', 'email'); ?></th>
        <th><?php echo $this->Paginator->sort('Registred', 'created'); ?></th>
    </tr>
       <?php foreach($users as $user): ?>
    <tr>
        <td><?php echo $user['User']['username']; ?> </td>
        <td><?php echo $user['User']['email']; ?> </td>
        <td><?php echo $user['User']['created']; ?> </td>
    </tr>
    <?php endforeach; ?>
</table>

Nah untuk menampilkan navigation pagination nya kita berikan code berikut

<?php echo $this->Paginator->counter(); ?>
<br/>
<?php echo $this->Paginator->numbers(); ?>

Jika langkah-langkah yang anda lakukan sudah benar seharusnya akan muncul seperti berikut

Pagination Cakephp

Pagination Cakephp


Posted in Concept, Pagination | Tagged , , | 1 Comment

Dasar Validasi pada Cakephp

Validasi merupakan bagian yang cukup penting dalam sebuah aplikasi web. Tujuannya untuk memastikan data input yang dimasukan oleh user sesuai dengan business rules dari aplikasi yang dibuat.  Sebagai contoh missal aplikasi yang akan kita bangun, untuk password minimal panjangnya 8 karakter, atau memastikan bahwa email yang dimasukan oleh user adalah valid.

Sebenarnya banyak cara untuk melakukan validasi pada cakephp, untuk artikel ini saya akan mencoba membahas validasi dari sisi Model. Hal yang penting harus anda ketahui adalah validasi dari sisi model ini akan selalu dilakukan ketika anda menjalankan function save() pada Model.

Langkah pertama untuk melakukan validasi pada model adalah dengan menambahkan attribute $validate pada model. Dimana attribute ini akan berisi rules dari attribute pada table. Sebagai contoh saya  akan membuat validasi untuk input data user, dimana password minimal 8 karakter dan email yang dimasukan harus valid. Kurang lebih modelnya sebagai berikut.

<?php
    class User extends AppModel{
        var $name  = 'User';
        var $validate = array(
            'password' => array(
                'rule' => array('minLength', '8'),
                'message' => 'Mimimum 8 characters long'
            ),
            'email' => array(
                'rule' => array('email', true),
                'message' => 'Please supply a valid email address.'
            )
        );
	}
?>

Nah, untuk controller dan view tidak perlu ditambah apapun. Sama seperti ketika tidak menggunakan validasi. Jika kita mengimplemetasika validasi pada model seperti diatas, hasil validasinya kira-kira seperti dibawah ini.

error Validation

Error Validation


Posted in tips & trik, Validasi | Tagged , , , | Leave a comment

multi layout pada cakephp

Kemarin ada pertanyaan tentang bagaimana menggunakan lebih dari satu layout pada cakephp. Jadi pada artikel ini saya mencoba akan membahasnya. Sebenarnya ada fitur yang lebih dari hanya sekedar layout yaitu theme. Tapi untuk tutorial ini hanya akan membahas theme aja.

Seperti telah kita tahu view pada cakephp berada diatas layout. Secara default bila tidak di definisikan cakephp akan mencari layout dengan nama default.ctp pada direktory /app/views/layouts. Nah untuk menggunakan lebih dari satu layout, kita tinggal membuat layout baru, dan letakan pada /app/views/layouts. Kemudian lakukan konfigurasi pada controllernya.Misal seperti  berikut

public function dashboard(){
$this->layout = 'admin';
/* your code.... */
}

Nah, apakah code tersebut harus dituliskan pada setiap function? tentu saja tidak! Ada beberapa cara

  1. Bila hanya pada satu controller, gunakan function beforeFilter() atau beforeRender().  Seperti telah kita tahu beforeFilter selalu dijalankan sebelum sebuah function dari controller dijalankan, beforeRender selalu dijalankan setelah function dijalankan tetapi sebelum cakephp melakukan render view. Nah disitulah kita bisa melatakkan konfigurasi layout kita. Misal seperti ini.
    function beforeFilter(){
    parent::beforeFilter();
    $this->layout = 'admin';
    }
  2. Bisa juga function diatas diletakan pada AppController. Maka semua controller akan menjalankan konfigurasi layout anda.
  3. Atau anda bisa membuat function tersendiri kemudian mengkonfigurasinya, berdasarkan prefix routing atau session yang anda tulis ketika user login.

Hanya Sekian tips singkatnya. Bila ada yang kurang jelas bisa ditanyakan melalui komentar.

Posted in Concept, tips & trik, View | Tagged , | 5 Comments