Tutorial Memulai Pembuatan Aplikasi Web dengan Yii2 (2): Ngubek Controller


Mungkin bagi Anda yang sudah terbiasa dengan menggunakan web framework, pastinya sudah akrab dengan arsitektur MVC. Dimana C dalam MVC adalahcontrollerController adalah sebuah kode yang akan memproses request yang datang dari sebuah URL tertentu. Controller juga bertugas untuk melakukan proses pengambilan data entah itu dari database ataupun resource lainnya kemudian menampilkannya ke dalam sebuah response yang biasanya berupa halaman HTML.
Menurut dokumentasi resmi Yii2, controller merupakan sebuah class yang diturunkan dari yii\base\Controller yang bertugas untuk memproses requestdan menghasilkan sebuah responseResponse tersebut dapat berupa text/html,application/jsonapplication/pdf, dan lainnya. Yii2 memiliki sejumlah variasi dalam menggunakan controller*. Mari kita lihat satu persatu.

Membuat controller baru

Membuat controller di Yii2 cukup mudah. Anda tinggal membuat sebuah file difolder hello-yii/controllers dengan mengikuti sejumlah aturan yang berlaku agarfile tersebut dapat dikenali sebagai controller*. Aturan dasar tersebut adalah sebagai berikut:
  • Sudah pasti ekstensi file harus .php
  • Nama file harus diawali dengan huruf kapital dan diakhiri denganController. Misal: LoremController, MahasiswaController, DosenController, FlightController, HotelController, dan lainnya
  • Bila terdiri dari dua suku kata maka digunakan camel case. Misal: LoremIpsumController, HotelExpediaController, FlightGarudaController, FlightAirAsiaController, FlightBatikAirController, dan lainnya
  • Nama file harus menjadi nama class dari controller yang Anda buat. Bila tidak digunakan akan terjadi error not found
Sekarang coba buat kode berikut ke dalam file dengan namaHelloController.php:

<?php




namespace app\controllers;

use Yii;


use yii\filters\AccessControl;

use yii\web\Controller;




class HelloController extends Controller

{



public function actions()


{


return [


'error' => [


'class' => 'yii\web\ErrorAction',


],

];

public function actionIndex()

}



{

echo "Hello World";


}



public function actionPosts($id=0, $category="all")


{


echo "Sedang menampilkan postingan dengan id: ".$id;

}

public function actionPostComments($id)




{

echo "Sedang menampilkan komentar dari postingan dengan id: ".$id;

}

public function actionUserPosts($user_id, $bulan, $tahun)




{

echo "Sedang menampilkan daftar postingan dari user dengan id ".$user_id." dengan arsip ".$bulan." / ".$tahun;

}
}



Source code diatas merupakan struktur umum sebuah controller. Sebuah classcontroller akan meng-extend sebuah class dari Yii2 yaitu class Controller yang berasal dari modul yii\web. Kemudian di dalam class terdapat berbagai methodyang bersifat public yang nantinya akan dapat diakses dari web browser melalui URL tertentu. Pada source code diatas, Anda dapat menemukan sebuah kode yaitu namespaceKeyword namespace adalah sebuah penanda bahwa filetersebut berada di sebuah virtual path yaitu app\controllersPath app adalah dari aplikasi Yii2 yang Anda tulis, sedangkan controllers adalah path dari foldercontrollers yang menyimpan file HelloController.php. Kegunaan namespaceadalah file tersebut dapat di-import dari class yang berada di dalam namespace* yang sama.
Kemudian ada keyword use, kurang lebih fungsinya sama dengan include()hanya saja ini adalah fitur yang lebih moderdn dibandingkan includeKeyworduse dipergunakan untuk menggunakan sebuah class yang sudah terdaftar dalamnamsepace. Sekarang mari kita periksa function yang ada di dalamHelloController:
  • actions(), adalah sebuah standalone function yang akan mengeluarkan aksi khusus yang ditangani oleh Yii2. Pada source code diatas, Yii2 akan menampilkan halaman error bila terjadi sebuah kesalahan
  • actionIndex(), akan memproses request dari URL seperti http://hostname/web/index.php?r=hello/ atau http://hostname/web/index.php?r=hello/index
  • actionPosts($id, $category) akan memproses request dari URL seperti http://hostname/web/index.php?r=hello/posts&id=1&category=programming, http://hostname/web/index.php?r=hello/posts, atau http://hostname/web/index.php?r=hello/posts&id=10. actionPosts()memiliki sebuah parameter id dan category yang tidak bersifat wajib karena sudah diberi nilai default jika tidak disertakan kedua parameter tersebut
  • actionPostsComments($id) akan memproses request dari URL seperti http://hostname/web/index.php?r=hello/post-comments&id=10. Actiontersebut memiliki sebuah parameter wajib yang bernama id.
  • actionUserPosts($user_id, $bulan, $tahun), akan memproses request dari URL seperti http://hostname/web/index.php?r=hello/users-posts?user_id=10&bulan=5&tahun=2010. Action tersebut memiliki tiga parameter wajib yang harus diisi, bila tidak diisi akan menimbulkan error Bad Request.
Dari penjelasan diatas dapat disimpulkan beberapa hal:
  • parameter r adalah nama aksi yang dituju pada suatu controller dengan segmen pertama adalah nama controller dan segmen kedua adalah namaaction (r=controller/action)
  • parameter selain r yang namanya sama dengan parameter yang ada di dalam action di class Controller merupakan parameter yang akan diproses lebih dulu oleh action. Bila diberi nilai default tidak akan menimbulkan errorBad Request. Sedangkan bila tidak diberi nilai default maka harus diisi dan disertakan ketika melakukan request terhadap action tersebut
  • setiap nama method harus diawali dengan kata action agar dikenali saat mengakses URL-nya
  • bila nama action mengandung dua kata seperti actionPostsComments danactionUserPosts maka akan dipisahkan dengan tanda strip (dash) menjadipost-comments dan user-posts. Tentunya bila Anda menulisnya dalam format camel case.

Membuat folder di dalam controller

Bila suatu saat Anda ingin mengelompokkan file - file controller dalam sebuahfolder, Yii2 sudah dapat memfasilitasi hal tersebut. Sekarang mari kita buat folderdengan nama media di dalam folder controllers. Kemudian buatlah file dengan nama AudioController.php di dalam folder controllers/media tersebut.
Sekarang silahkan buat source code berikut di dalam file AudioController.php:

<?php




namespace app\controllers\media;

use Yii;


use yii\filters\AccessControl;

use yii\web\Controller;




class AudioController extends Controller

{



public function actions()


{


return [


'error' => [


'class' => 'yii\web\ErrorAction',


],

];

public function actionIndex($id=null)

}



{

echo "Sedang menampilkan daftar file audio yang sudah diupload ".$id;

}

public function actionCreate()




{

echo "Disini akan muncul form tambah audio";


}

}



Sekarang buat lagi file dengan nama PhotoController.php di dalam foldercontrollers/media dan buat source code di bawah ini:

<?php




namespace app\controllers\media;

use Yii;


use yii\filters\AccessControl;

use yii\web\Controller;




class PhotoController extends Controller

{



public function actions()


{


return [


'error' => [


'class' => 'yii\web\ErrorAction',


],

];

public function actionIndex($id=null)

}



{

echo "Sedang menampilkan daftar foto yang sudah diupload ".$id;

}

public function actionCreate()




{

echo "Disini akan muncul form tambah foto";


}

}



Sekarang buat lagi file dengan nama VideoController.php di dalam foldercontrollers/media dan buat source code di bawah ini:

<?php




namespace app\controllers\media;

use Yii;


use yii\filters\AccessControl;

use yii\web\Controller;




class VideoController extends Controller

{



public function actions()


{


return [


'error' => [


'class' => 'yii\web\ErrorAction',


],

];

public function actionIndex($id=null)

}



{

echo "Sedang menampilkan daftar video yang sudah diupload ".$id;

}

public function actionCreate()




{

echo "Disini akan muncul form tambah video";


}

}



Sekarang Anda dapat mengakses ketiga controller tersebut dengan URL seperti berikut:
  • http://hostname/web/index.php?r=media/audio
  • http://hostname/web/index.php?r=media/audio&id=10
  • http://hostname/web/index.php?r=media/audio/create
  • http://hostname/web/index.php?r=media/video
  • http://hostname/web/index.php?r=media/video&id=10
  • http://hostname/web/index.php?r=media/video/create
  • http://hostname/web/index.php?r=media/photo
  • http://hostname/web/index.php?r=media/photo&id=10
  • http://hostname/web/index.php?r=media/photo/create
Menarik bukan? begitulah bagaimana cara Yii2 bekerja dalam menangani requestdari sebuah URL. Mari kita lanjutkan ke bagian yang lain.

Menentukan default route

Di dalam folder config terdapat beberapa file konfigurasi untuk paramsdb,console, dan web. Anda dapat menambahkan default route agar ketika membuka URL utama (root) dapat menampilkan controller yang Anda tentukan.
Silahkan tambahkan konfigurasi berikut ke dalam array $config tepat dibawah konfigurasi dengan key id:

$config = [


'id' => 'basic',


'defaultRoute' => 'hello',


....


];

Maka hasilnya akan seperti pada gambar berikut ini:

Menggunakan redirect()

Anda pun dapat menggunakan method redirect() yang sudah built-in dari classControllerMethod tersebut digunakan untuk mengalihkan halaman dari halaman Anda saat ini ke halaman lain yang ditentukan:

<?php




namespace app\controllers;

use Yii;

use yii\filters\AccessControl;

use yii\web\Controller;



class HelloController extends Controller

{



...........................................................


public function actionTestRedirect()


{


echo "Halaman ini akan diredirect ini dalam 5 detik...";


sleep(5);


return $this->redirect('/hello-yii/web/index.php');


}


}

Menyusun controller map

Anda juga dapat menambahkan controller map yaitu mengarahkan controller ke URL yang Anda tentukan sendiri. Anda dapat menambahkan controller map di dalam $config di file config/web.php. Agar tidak bingung penempatannya, silahkan tambahkan controllerMap di setelah id:

$config = [


'id' => 'basic',


'controllerMap' => [


// declares "account" controller using a class name


'demo' => 'app\controllers\HelloController',


],


...


];

Maka hasilnya akan seperti pada gambar berikut ini:

Mengaktifkan pretty url

Anda juga dapat mengaktifkan pretty url agar URL diubah menjadi bentuk segmen dibandingkan query string. Anda dapat menambahkan urlManager di dalam parameter components di $config yang berada di file config/web.php. Agar tidak bingung silahkan tambahkan urlManager di bagian paling awal parameter components:

$config = [


'id' => 'basic',


...


'components => [


'urlManager' => [


'enablePrettyUrl' => true,


'showScriptName' => true,


'enableStrictParsing' => false,


'rules' => [],


],


...

],

];

Maka hasilnya akan seperti pada gambar berikut ini:

Penutup

Sekarang Anda sudah mengenal beberapa teknik dalam menggunakan controllerdi Yii2. Anda pun dapat mengatur URL untuk menjadi pretty url atau versi konvensional. Selain itu Anda pun dapat memetakan sebuah controller ke dalam URL yang Anda definisikan sendiri melalui controller map. Secara umum, Yii2 sudah mampu mengakomodasi kebutuhan Anda untuk mendefinisikan controllerdengan berbagai kondisi.

Subscribe to receive free email updates:

0 Response to "Tutorial Memulai Pembuatan Aplikasi Web dengan Yii2 (2): Ngubek Controller"

Posting Komentar