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.

  1. Prainstalasi
  2. Instalasi YiiFramework 2.0
  3. Login
  4. Login dengan Database pada Yii2
  5. Bekerja dengan Gii
  6. Module pada Yii2
  7. Layout dasar dan Manipulasinya pada Yii2
  8. Costum Asset dan Asset Bundle pada Yii2
  9. Alias pada Yii2
  10. Bekerja dengan Form
  11. Timestamp, Blameable, dan Sluggable Behavior pada Yii2
  12. Menggunakan Rich Text Input CkEditor dan Alternatifnya pada Yii2
  13. Gridview dan Listview
  14. SEO Friendly Url dengan slug
  15. Scenario pada Model Yii2
  16. Retrieve data pada Yii2
  17. Relasi Database pada Yii2
  18. Widget Kartik
  19. Select2 dengan Kartik Ekstension
  20. Dependent Dropdown pada Yii2
  21. Bekerja dengan Modals
  22. Membuat Costum Template untuk Gii
  23. Mengupload File
  24. Mengupload File dengan Kartik Widget
  25. Gridview atau Datatables?
  26. Session dan Cookie pada Yii2
  27. Menggunakan AdminLTE pada Yii2
  28. Membuat Themes pada Yii2
  29. Menggunakan GoogleMaps API pada Yii2
  30. Menggunakan Socket.io pada Yii2
  31. Handling Error
  32. Bekerja dengan AuthClient
  33. Menggunakan Amazon S3 pada Yii2
  34. Mengirim Email dengan Swiftmailer pada Yii2
  35. Middleware pada Yii2
  36. Mengenal RBAC pada Yii2
  37. Implementasi RBAC pada Yii2
  38. 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:

  1. 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.
  2. Stack yang digunakan adalah Wamp Server (Apache 2.2, MySQL, PHP 7).
  3. 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

Mengenal Behaviors

Secara sederhana Behavior pada Yii2 adalah Class yang meningkatkan fungsionalitas suatu component class tanpa perlu mengubah inheritance dari Class. Behavior dapat merespon even-even yang ditriger oleh komponen, yang memungkinkan behavior juga mengkostumasi ekseksui kode yang berjalan pada sebuah Class component.

Behavior yang dibahas pada tulisan ini adalah behavior yang ada pada Yii2, antara lain timestamp behavior, blameable bahavior, dan sluggable behavior. Tiga behavior ini akan kita gunakan pada contoh project Yii2-series kita. TimestampBehavior akan digunakan agar tanggal pada field created_at dan updated_at dapat terisi secara otomatis dengan tanggal saat ini. BlameableBehavior akan digunakan agar field created_by dan updated_by dapat terisi secara otomatis dengan user yang login saat ini. Terakhir, sluggable behavior akan digunakan untuk membuat field slug dapat terisi secara otomatis dengan judul yang dikonversi pada format slug, field slug ini nantinya akan kita gunakan untuk mengganti url kita menjadi lebih SEO friendly.

Timestamp Behavior

TimestampBehavior sebelumnya pernah dibahas pada blog ini lewat tulisan Timestamp Behavior pada Yii2. Anda dapat membaca informasi mengenai TimestampBehavior pada link tersebut.

Jika sebelumnya kita menambahkan informasi created_at dan updated_at dengan DatePicker pada _form, dengan TimestampBehavior informasi tanggal pembuatan record akan otomatis terisi tanpa harus diisi secara manual. Kita akan menambahkan TimestampBehavior pada model dengan menambahkan kode berikut pada model anda \app\models\Blog.php

use yii\behaviors\TimestampBehavior;

............
class Blog extends \yii\db\ActiveRecord
{
// ........

public function behaviors()
{
return [
TimestampBehavior::className(),
];
}

Kita tidak perlu melakukan modifikasi pada Behavior kita karena kita menggunakan nama field default Yii2 untuk TimestampBehavior (created_at dan updated_at).

Blameable Behavior

Blameable Behavior memudahkan kita dalam mengisi informasi user yang membuat atau mengubah suatu record. Jika sebelumnya kita menambahkan informasi created_by dan updated_by melalui drodown list pada user, dengan BlameableBehavior informasi ini akan otomatis terisi sesuai dengan user yang saat ini sedang login. Kita akan menambahkan TimestampBehavior pada model dengan menambahkan kode berikut pada model anda \app\models\Blog.php.

use yii\behaviors\TimestampBehavior;
use yii\behaviors\BlameableBehavior;

............
class Blog extends \yii\db\ActiveRecord
{
// ........

public function behaviors()
{
return [
TimestampBehavior::className(),

BlameableBehavior::className(),
];
}

Kita tidak perlu melakukan modifikasi pada Behavior kita karena kita menggunakan nama field default Yii2 untuk BlameableBehavior (created_by dan updated_by).

Sluggable Behavior

Slug adalah bagial dari URL yang mengidentifikasikan halaman yang sedang dibuka agar lebih mudah dibaca manusia dan tentunya SEO friendly. Pada tabel blog kita sudah disediakan field untuk menyimpan slug ini yaitu field slug. Yii2 menyediakan behavior bawaan yang dapat memudahkan kita dalam membuat slug pada saat proses input.

Jika sebelumnya kita menambahkan informasi slug melalui textfield pada form, dengan SluggableBehavior maka field slug tersebut akan terisi secara otomatis dengan format slug yang valid untuk URL. Kita akan menambahkan SluggableBehavior pada model dengan menambahkan kode berikut pada model anda \app\models\Blog.php.

use yii\behaviors\TimestampBehavior;
use yii\behaviors\BlameableBehavior;
use yii\behaviors\SluggableBehavior;

............
class Blog extends \yii\db\ActiveRecord
{
// ........

public function behaviors()
{
return [
TimestampBehavior::class,

BlameableBehavior::class,
'slug' => [
'class' => SluggableBehavior::class,
'attribute' => 'title',
'ensureUnique' => true,
'immutable' => true
]
];
}

Pada contoh di atas kita akan membuat slug dengan menkonversi field title menjadi format slug pada field slug. Kita tidak perlu menambahkan slugAttribute karena kita sudah menamai field slug sesuai dengan default attribute untuk SluggableBehavior.

Modifikasi Form Sesuai Format Behavior

Kita sudah menambahkan behavior sehingga kita tidak memerlukan lagi isian field pada form.php untuk field-field yang sudah diisi dengan behavior. Ubah form kita dengan menghapus field tersebut sehingga file \app\modules\administrator\views\blog\_form.php.

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;

?>

<div class="blog-form">

<?php $form = ActiveForm::begin(); ?>

<?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>

<?= $form->field($model, 'body')->textarea(['rows' => 6]) ?>

<div class="form-group">
<?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
</div>

<?php ActiveForm::end(); ?>

</div>

Walaupun dalam form tidak terisi namun field tersebut akan terisi otomatis oleh behavior yang telah kita buat.


Semoga bermanfaat dan happy coding!