Kamis, 10 Maret 2016
Penjelasan Tentang Controller di Yii2
Pada bagian ini saya akan menjelaskan tentang apa itu controller.Controllers adalah bagian dari arsitektur MVC. Mereka merupakan object dari class-class yang di extend dari yii\base\Controller yang bertanggung jawab untuk memproses request dan membuat response. Khususnya, setelah mengambil alih control dari aplikasi, controller akan menganalisa request data yang masuk, meneruskannya ke model, memasukkan hasil model kedalam view, dan akhirnya meng-generate response.
Action
Controller terdiri dari action-action yang mana merupakan unit dasar yang dapat di request user untuk dieksekusi. Sebuah controller bisa terdiri dari satu atau lebih action.Contoh berikut adalah controller post dengan 2 actions yaitu view dan create.
namespace app\controllers; use Yii; use app\models\Post; use yii\web\Controller; use yii\web\NotFoundHttpException; class PostController extends Controller { public function actionView($id) { $model = Post::findOne($id); if ($model === null) { throw new NotFoundHttpException; } return $this->render('view', [ 'model' => $model, ]); } public function actionCreate() { $model = new Post; if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->id]); } else { return $this->render('create', [ 'model' => $model, ]); } } }
Dalam action view (didefinisikan dengan method actionView()), pertama-tama model dimuat berdasarkan model ID yang di request, jika model tersebut berhasil dimuat, view yang bernama view akan digunakan untuk menampilkan hasilnya. Jika model tidak berhasil dimuat, sebuah exception akan dihasilkan.
Dalam action create (didefinisikan dengan method actionCreate()), pertama-tama model dimuat dan diisi dengan request data lalu model tersebut disimpan. Jika semuanya berhasil, browser akan dialihkan ke action view dengan ID dari model yang baru saja dibuat. Jika tidak, view create akan ditampilkan dimana user dapat memasukkan data.
Route
User memanggil action melalui sebuah route. Sebuah route merupakan sebuah string yang terdiri dari beberapa bagian berikut:- module ID : hanya ada jika controller merupakan bagian dari module yang bukan aplikasi.
- controller ID : sebuah string yang secara unik menjadi identitas sebuah controller diantara controller-controller lain dalam satu aplikasi yang sama (atau module yang sama jika controller merupakan bagian dari sebuah module).
- action ID : sebuah string yang secara unik menjadi identitias sebuah action diantara action-action lain dalam satu controller yang sama.
ControllerID/ActionID
atau format berikut jika controller merupakan bagian dari module
ModuleID/ControllerID/ActionID
Jika user mengakses URL http://localhost/index.php?r=site/index, artinya action index dalam controller site akan dieksekusi.Membuat Controller Yii2
Dalam aplikasi web, controller harus di extend dari yii\web\Controller atau child class nya. Begitu juga untuk aplikasi console, controller harus di extend dari \yii\console\Controller atau child class nya.Kode berikut mendefinisikan sebuah controller site:
namespace app\controllers; use yii\web\Controller; class SiteController extends Controller { }
Controller ID
Biasanya, controller didesain untuk menangani request yang berhubungan dengan resource tertentu. Untuk alasan ini, controler ID sering kali berupa kata benda yang merujuk pada tipe resource yang ditangani. Contohnya, article dapat diartikan sebuah ID controller yang menangani data artikel.Secara default, controller ID hanya dapat terdiri dari karakter-karakter alfabet lowercase, digit, underscore, tanda hubung(-) dan slash(/).
Contohnya, article dan post-comment adalah controller ID yang valid. sedangkan article?, PostComment, admin\post tidak valid.
Controller ID juga dapat memuat subdirektori. Contohnya, admin/article menandakan controller article yang ada didalam subdirektori admin dalam namespace controller.
Penamaan Class Controller
Nama class controller dapat diturunkan dari controller ID sesuai dengan prosedur berikut:- Ubah huruf pertama dari setiap kata yang dipisah oleh tanda hubung dengan huruf kapital. Perlu diingat apabila controller ID memuat slash(/), aturan ini hanya berlaku untuk bagian sesudah slash terakhir pada ID.
- Hapus tanda hubung dan ganti slash(/) dengan backslash(\).
- Tambahkan suffix Controller diakhir nama class.
- Tambahkan controller namespace sebelum nama class.
- article menjadi app\controllers\ArticleController.
- post-comment menjadi app\controllers\PostCommentController.
- admin/post-comment menjadi app\controllers\admin\postCommentController.
- adminPanels/post-comment menjadi app\controllers\adminPanels\PostCommentController.
Controller Default
Setap aplikasi memiliki default controller yang diatur dengan property yii\base\Application::$defaultRoute. Ketika request tidak menentukan route, route yang diatur dengan properti ini akan digunakan. Untuk aplikasi web, nilainya adalah 'site', dan untuk aplikasi console adalah help. Apabila URL yang diakses user adalah http://localhost/index.php maka controller site lah yang akan menangani request tersebut.Anda dapat mengubah defaultnya dengan konfigurasi aplikasi berikut:
[
'defaultRoute' => 'main',
]
Membuat Action Pada Controller Yii2
Membuat action pada dasarnya semudah mendefinisikan action method dalam class controller.Action Method adalah public method yang namanya dimulai dengan kata action. Value yang di-return oelh action method mewakili data response yang dikirim kepada user. Kode berikut mendefinisikan 2 action, index dan hello-world:
namespace app\controllers; use yii\web\Controller; class SiteController extends Controller { public function actionIndex() { return $this->render('index'); } public function actionHelloWorld() { return 'Hello World'; } }
Action ID
Action biasanya dirancang untuk melakukan manipulasi tertentu pada resource. Untuk alasan ini, action ID biasanya berupa kata kerja, seperti view, update dan lain-lain.Aturan karakter untuk action id sama dengan Controller ID, kecuali untuk tanda slash. Karena tidak ada
slash di dalam action ID.
Hasil Action
Return value dari sebuah action dapat berupa response object yang akan dikirim kepada end user sebagai response.Untuk aplikasi web, return value dapat berupa arbitrary data yang akan ditetapkan pada yii\]web\Response::$data dan dapat dikonversi kedalam string yang mewakili response body.
Pada contoh berikut, hasil dari action adalah string yang menjadi response body yang dikirim ke end user.
public function actionHello() { // menampilkan Hello World return "Hello World"; }Pada contoh berikut menunjukkan bagaimana action dapat me-redirect user ke URL baru dengan me-return response object (method redirect() me-return response object).
public function actionForward() { // redirect the user browser to http://example.com return $this->redirect('http://example.com'); }
Parameter Action
Action method dapat menerima parameter, disebut dengan action parameter. Nilainya didapat dari request. Untuk aplikasi web, nilai dari setiap action parameter didapat dari $_GET menggunakan nama parameter sebagai kunci. Untuk console, parameter berupa command line argument.Pada contoh berikut, action view mendeklarasikan 2 parameter : $id dan $version.
namespace app\controllers; use yii\web\Controller; class PostController extends Controller { public function actionView($id, $version = null) { // ... } }action parameter akan diisi dengan data-data berikut untuk request berbeda:
- http://localhost/index.php?r=post/view&id=123 : parameter $id akan diisi dengan nilai 123, sedangkan $version tetap null karena tidak ada parameter query version dan $version memiliki default null.
- http://localhost/index.php?r=post/view&id=123&version=2 : $id akan berisi 123 dan $version akan berisi nilai 2.
- http://localhost/index.php?r=post/view akan menghasilkan exception yii\web\BadRequestHttpException karena tidak ada parameter $id sedangkan $id tidak memiliki nilai default.
- http://localhost/index.php?r=post/view&id[]=123 akan menghasilkan exception yii\web\BadRequestHttpException karena parameter $id menerima nilai array yang tidak diharapkan.
public function actionView(array $id, $version = null) { // ... }Dengan deklarasi action diatas, anda bisa melakukan request http://localhost/index.php?r=post/view&id[]=123. Apabila requestnya bukan array seperti http://localhost/index.php?r=post/view&id=123 maka secara otomatis akan dirubah mejadi array skalar dimana 123 menjadi elemen pertama dari array.
Default Action
Setiap controller memiliki default action yang ditentukan dari yii\base\Controller::$defaultAction,. Ketika route memuat hanya controller ID, default action-lah yang akan dieksekusi.Secara default, default action adalah index. Jika anda ingin merubah defaultnya, anda bisa meng-override menggunakan property seperti pada contoh berikut:
namespace app\controllers; use yii\web\Controller; class SiteController extends Controller { public $defaultAction = 'home'; public function actionHome() { return $this->render('home'); } }
Siklus Controller
Saat memproses request, aplikasi akan membuat controller berdasarkan pada route yang direquest. Controller akan menjalani siklus berikut untuk memenuhi request:- Method yii\base\Controller::init() dipanggil setelah controller dibuat dan dikonfigurasi.
- Controller membuat action object berbasis pada action ID yang di-request:
- Jika action ID tidak ditentukan, default action ID digunakan.
- Jika action ID ditemukan dalam action map, action standalone akan dibuat.
- Jika action ID ditemukan dan sesuai dengan action method, inline action akan dibuat.
- Selain itu, yii\base\InvalidRouteException dihasilkan.
- Controller secara berurutan memanggil method beforeAction() aplikasi, module (jika controller merupakan bagian dari module), dan controller.
- Jika salah satu eksekusi me-return false, eksesusi action dibatalkan.
- Secara default, setiap method beforeAction() memicu event beforeAction.
- Controller menjalankan action
- Parameter Action di analisa dan diisi dari request data.
- Controller secara berurutan memanggil method afterAction() aplikasi, module (jika controller merupakan bagian dari module), dan controller.
- Secara default, setiap method afterAction() memicu event afterAction.
- Aplikasi akan mengambil hasil dari action.
Penerapan Terbaik
Pada aplikasi yang didesain baik-baik, controller biasanya hanya berisi beberapa baris kode. Jika controller terlalu rumit, menandakan bahwa anda harus me-refactor nya dan memindahkan beberapa code ke class lain.Berikut adalah beberapa penerapan terbaik untuk controller:
- dapat mengakses request data.
- dapat memanggil method dari model dan service component lain untuk me-request data.
- dapat menggunakan view untuk me-render response.
- seharusnya tidak memproses request data. Aktifitasi ini harus dilakukan di layer model.
- seharusnya tidak memuat HTML atau tampilan lain. Hal ini harusnya ditempatkan di view.
loading...
Langganan:
Posting Komentar
(
Atom
)
Popular Posts
-
Secara default, Yii2 dibekali oleh template Bootstrap 3. Namun kita juga bisa menambahkan template lain yang lebih baik, seperti misalnya ...
-
Pada tutorial ini, saya akan membahas bagaimana cara membuat aplikasi CRUD (Create Read Update Delete) database secara otomatis dengan mengg...
-
RBAC (Role-Based Access Control) adalah konsep Access Control di Yii2 yang memisahkan hak akses user berdasarkan role atau peran. Yii2 sen...
© Asudahlah.com 2016 . Powered by Twitter Bootstrap , Blogger
Tidak ada komentar :
Posting Komentar