Pada tulisan ini saya akan membuat series mengenai pemrograman dengan Yii Framework. Series ini akan disusun untuk membuat sebuah program sederhana yang memanfaatkan fitur-fitur umum yang sangat mungkin digunakan di banyak kasus. Tulisan ini akan menggunakan Basic Template Yii2 (yang menurut saya penggunaannya sedikit lebih sulit daripada advance template Yii2).
Secara garis besar (dan mungkin akan bertambah sesuai keperluan yang mungkin terjadi) outline dari seri tulisan ini akan terdiri dari hal berikut.
- Prainstalasi
- Instalasi YiiFramework 2.0
- Login
- Login dengan Database pada Yii2
- Bekerja dengan Gii
- Module pada Yii2
- Layout dasar dan Manipulasinya pada Yii2
- Costum Asset dan Asset Bundle pada Yii2
- Alias pada Yii2
- Bekerja dengan Form
- Timestamp, Blameable, dan Sluggable Behavior pada Yii2
- Menggunakan Rich Text Input CkEditor dan Alternatifnya pada Yii2
- Gridview dan Listview
- SEO Friendly Url dengan slug
- Scenario pada Model Yii2
- Retrieve data pada Yii2
- Relasi Database pada Yii2
- Menggunakan Bootstrap4
- Widget Kartik dan Kartik Gridview
- Select2 dengan Kartik Ekstension
- Dependent Dropdown pada Yii2
- Bekerja dengan Modals
- Membuat Costum Template untuk Gii
- Mengupload File
- Mengupload File dengan Kartik Widget
- Gridview atau Datatables?
- Session dan Cookie pada Yii2
- Menggunakan AdminLTE pada Yii2
- Membuat Themes pada Yii2
- Menggunakan GoogleMaps API pada Yii2
- Menggunakan Socket.io pada Yii2
- Handling Error
- Bekerja dengan AuthClient
- Menggunakan Amazon S3 pada Yii2
- Mengirim Email dengan Swiftmailer pada Yii2
- Middleware pada Yii2
- Mengenal RBAC pada Yii2
- Implementasi RBAC pada Yii2
- Notifikasi Real Time dengan Socket.io pada Yii2
Anda dapat mengunduh dan memantau progress dari series ini lewat repositori Github belajararief-yii2series. Silahkan bintangi (star) untuk dapat lebih mudah memantau perkembangan repositori.
Requirement
Untuk memudahkan anda dalam memahami petunjuk ini, maka beberapa hal yang perlu diperhatikan diantaranya:
- Sistem Operasi yang saya gunakan adalah Windows 10 64bit dengan terminal menggunakan powershell terminal (beberapa command seperti cd dapat berbeda dengan command prompt biasa), namun saya akan berusaha sebisa mungkin mencontohkan perintah pada sistem operasi lain jika memunkinkan.
- Stack yang digunakan adalah Wamp Server (Apache 2.2, MySQL, PHP 7).
- Yii yang digunakan adalah Yii 2.0 dengan catatan jquery yang digunakan bukan jquery3. Beberapa perintah jquery akan berbeda pada jquery3, dan beberapa extensions yang saya gunakan sepertinya belum mendukung jquery3
Menambahkan Menu
Pada tulisan sebelumnya kita sudah membuat sebuah modul bernama administrator dan crud blog yang berada pada modul administrator. Agar lebih mudah diakses, maka akan lebih baik jika kita membuat link pada navigasi/menu kita ke administrator/blog. Kita dapat mengubah menu tersebut pada layout Yii2. Secara default, layout Yii2 tersimpan pada \app\views\layout\main.php
. File ini akan menggambarkan seluruh layout mulai dari header, sampai pada bagian footer dari aplikasi Yii2 anda. Untuk menambahkan menu maka kita akan membuka file tersebut dan menambahkan bagian berikut pada Nav::widget()
kita.
.... echo Nav::widget([
// .....
'items' => [
// ....
['label' => 'Manajemen Blog', 'url' => ['/administrator/blog']],
// .....
]); ...
Nav
merupakan helpers bagi komponen Nav pada Bootstrap 3. Bootstrap 3 adalah css dan js library default yang digunakan pada Yii2. Sehingga jika anda perhatikan, method pada Nav sangat berkaitan dengan Nav pada bootstrap 3, hanya saja ditulis dengan cara PHP sehingga lebih mudah untuk kita melakukan debug.
Menu Kondisional
Namun karena pembuatan artikel pada blog ini sebaiknya hanya dapat diakses oleh pengguna yang sudah login, maka kita akan membuat hanya pengguna yang sudah login saja yang dapat mengakses crud untuk blog. Oleh karena itu kita akan mengubah layout kita menjadi seperti di bawah ini.
.... echo Nav::widget([
// .....
'items' => [
// ....
['label' => 'Manajemen Blog', 'url' => ['/administrator/blog'], 'visible' => !Yii::$app->user->isGuest],
// .....
]); ...
Kita menambahkan method visible agar hanya pengguna yang sudah login saja yang dapat mengakses menu tersebut.
Access Control Filter pada Controller
Namun tentunya menyembunyikan menu saja bukan cara yang baik untuk menutup akses pengguna yang tidak berhak. Untuk itu kita juga akan menutup akses pada Controller. Bagi anda yang terbiasa dengan Framework Js seperti angular tentunya mengenal fitur ini mirip seperti middleware (yang memang lebih dahulu diperkenalkan pada Angular seingat saya). Namun Yii2 masih menggunakan istilah Access Control agar pengguna yang bermigrasi dari Yii1 tidak terlalu mengubah flow pengerjaan aplikasi. Untuk itu kita akan membuka \app\modules\administrator\controllers\BlogController.php
dan menambahkan code berikut pada Controller.
<?php
namespace app\controllers;
//.....
use yii\filters\AccessControl;
class SiteController extends Controller
{
// ....
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['index', 'view', 'create', 'update', 'delete'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
// .......
}
Dengan kode tersebut maka hanya pengguna yang teregistrasi saja (ditandai dengan '@' ) yang dapat mengakses BlogController pada modul administrator. Pada contoh di atas kita menyebutkan satu per satu action yang akan di atur. Namun apabila anda ingin memberlakukan rule tersebut pada semua action di Controller tersebut maka cukup ganti nama action tersebut dengan wild card symbol ('*').
Baiklah mungkin itu dulu mengenai Layout dan manipulasinya. Manipulasi besar mengenai layout akan kita bahas pada tulisan berikutnya pada Asset dan Yii2 AssetBundle. Semoga bermanfaat dan Happy Coding!