Kamis, 31 Juli 2014

Melempar Parameter dari URL ke Controller

Sebagai contoh,Kita punya sebuah controller dengan nama Controller_User. Pada controller tersebut terdapat sebuah method dengan nama action_hello. Method tersebut berfungsi untuk menampilkan sebuah nama user. Sederhananya seperti contoh di bawah.

<?php
/**
 * User controller
 *
 */
class Controller_User extends Controller {
    
    public function action_hello()  {
        echo 'Hello Stranger!';
    }
    
}
/* APPPATH/classes/controller/user.php */

Silakan akses dari browser dengan URL  localhost/public/user/hello (berikutnya cukup disebut user/hello). Apabila tidak ada masalah, browser akan menampilkan teks "Hello Stranger!".











Nah, kita inginnya kata "Stranger" pada skrip di atas dibuat dinamis sesuai dengan inputan. Inputan disini tidak harus selalu melalui form, contoh lain misalnya dengan mengambil parameter dari URL.

http://www.domain.com/controller/action/param_1/param_2/param_3/param_n


FuelPHP mendukung input dari URL (bukan request GET), dengan aturan baku dimana segmen pertama merupakan nama class, sedangkan segmen kedua adalah nama method, maka segmen ketiga dan seterusnya adalah parameter input. Contoh URL dengan melempar parameter melalui URL: http://localhost/fuel1/public/user/hello/lely atau http://localhost/fuel1/public/user/hello/lala.

Hal selanjutnya adalah menangkap paramater tersebut dari controller, atau lebih spesifiknya menangkap parameter tersebut melalui method action_hello seperti contoh skrip di atas.

<?php
/**
 * User controller
 *
 */
class Controller_User extends Controller {
    
    public function action_hello($name) {
        echo 'Hello '.$name.'!';
    }

}
/* APPPATH/classes/controller/user.php */

 Cobalah mengkases URL user/hello/lely, dan lihat hasilnya. Beutiful! Browser akan menampilkan teks "Hello lely!".

 









Nah, sekarang cobalah akses URL tanpa menyertakan paramater, contoh: user/hello, dan lihat apa yang terjadi? Bloody Hell! FuelPHP mengembalikan respon 404 hanya karena kita tidak menyertakan parameter.











Pesan kesalahan tersebut menjelaskan bahwa sebenarnya tidak ada nilai default untuk argumen pada sebuah method yang kita buat. Namun, sudah dimodifikasi oleh core FuelPHP sehingga respon yang ditampilkan langsung merujuk ke 404. Solusinya? Cukup tambahkan nilai default seperti contoh skrip di bawah.

public function action_hello($name = null) {
    $name = empty($name) ? 'Stranger' : $name;
    echo 'Hello '.$name;
}

Jumlah parameter yang dilempar melalui URL tidak terbatas, kita bisa menambahkan sebanyak yang kita mau, misal URL user/hello/lely/Solo. Langkah selanjutnya tinggal memprosesnya pada method, tidak diprosespun tidak apa-apa.

public function action_hello($name = null, $from = null) {
    $name = empty($name) ? 'Stranger' : $name;
    $from = empty($from) ? 'World' : $from;
    echo 'Hello '.$name.', From '.$from;
}

Ada sedikit masalah yang mengganjal, bagaimana jika paramater yang diinputkan tidak tentu jumlahnya? Bagaimana menentukan nilai defaultnya? Untuk kasus ini, kita bisa memanfaatkan librari Uri bawaan FuelPHP. Ada dua method yang dapat kita manfaatkan yaitu segment dan segments.

/**
 * Sample URL : domain.com/user/hello/stranger/who/are/you
 */
public function action_hello() {
    echo Uri::segment(1); // user
    echo Uri::segment(3); // stranger
    // dengan melempar default value
    echo Uri::segment(100, 'I\'m not exist!') // I'm not exist
    // mendapatkan semua indeks dan nilai paramater dalam bentuk array
    var_dump(Input::segments()); // // returns array(0 => 'user', 1 => 'hello', ...)
}

Mungkin sebagian dari kita bertanya-tanya, apa manfaatnya? Bagaimana implementasinya? Contoh kasus nyata penggunaan parameter tersebut ada pada website ini. Silakan lihat URL di atas, terdapat parameter melempar-parameter-dari-url-ke-controller bukan? parameter ini digunakan controller untuk melakukan pencarian artikel ke dalam basisdata, kemudian artikel tersebut ditampilkan ke browser. Memang tidak sesederhana itu prosesnya, tapi paling tidak kita dapat gambaran langsung guna dari parameter tersebut. ;)

SRC : http://www.fuelphp.yugo.my.id/post/tutorial/melempar-parameter-dari-url-ke-controller

Tidak ada komentar:

Posting Komentar