Secara default Yii2 menyediakan beberapa component yang memiliki kegunaan sendiri sendiri, sebagai contoh yang sering saya gunakan adalah user. Component ini berguna untuk berinteraksi hal hal yang berkaitan dengan user. contoh lain adalah component session, jelas component ini untuk hal hal yang berkaitan dengan session pada PHP. Kita dapat membuat custom component sendiri, disesuaikan dengan kebutuhan projek kita, nantinya component ini dapat digunakan secara global di controller manapun.
Penggunaan Component
Berikut penggunaan Component di framework
Yii2 : Yii::$app->namaComponent->namaMethod
contoh:
Yii::$app->request->post("username")
request adalah nama component (componentID), sedangkan post adalah nama method yang ada pada component request.
Component Bawaan Yii2:
Yii::$app->user
Yii::$app->session
Yii::$app->request
Yii::$app->cache
Yii::$app->mailer
Membuat Component Yii2 Sendiri
Seperti yang kita tahu Yii2 terdapat 2 jenis, yaitu template basic dan template advanced, keduanya mempunyai cara yang berbeda dalam peletakan component, tapi syntaxnya ya tetep sama, paling beda namespace doang.
Template Advanced
Buat sebuah folder beri nama components pada directory common/, buat sebuah file PHP dalam folder tersebut, sebagai contoh beri nama AlertComponent.php isikan filenya kurang lebih seperti ini.
<?php namespace common\components; use Yii; use yii\base\Component; use yii\helpers\Html; class AlertComponent extends Component{ public $content; public $id_user; public function init(){ parent::init(); $this->content= 'Hai ini components Yii2'; } public function display($content=null){ if($content!=null){ $this->content= $content; } echo Html::encode($this->content); } } ?>
Kita cuma main memanggil class base Component dan meng extends class component kita dengan class base Component, untuk isi dari class, terserah deh mau isi apa, yang terpenting adalah disesuaikan dengan kebutuhanmu.
Meregister Component Yang Dibuat
Ok sekarang kita perlu meregisterkan component yang baru kita buat, kenapa? supaya bisa dipanggil lah, supaya yii2 tau kalau kita sudah membuat component. buka class main-local.php di folder common/config. tambahkan kode kurang lebih seperti ini :
'components' => [ 'authManager' => [ 'class' => 'yii\rbac\DbManager', // or use 'yii\rbac\DbManager' ], 'alert' => [ 'class' => 'common\components\AlertComponent', ], ],
Menggunakan Component
Ok sekarang waktunya testing, apakah berjalan apa tidak, buka sebuah Controller di folder frontend, disini saya menggunakan controller SiteController. Buat sebuah method lalu didalam method tersebut panggil component kita
public function actionTest() { echo Yii::$app->alert->display('hi this from component'); }Bila berhasil akan seperti ini
Template Basic
Kurang lebih langkahnya sama, cuman beda folder doang, buat folder components, dalam folder root (folder projek) buat sebuah file PHP dalam folder tersebut, beri nama AlertComponent.php, isinya seperti ini:
<?php namespace app\components; use Yii; use yii\base\Component; use yii\helpers\Html; class AlertComponent extends Component{ public $content; public $id_user; public function init(){ parent::init(); $this->content= 'Hai ini components Yii2'; } public function display($content=null){ if($content!=null){ $this->content= $content; } echo Html::encode($this->content); } } ?>Kalau di template advanced kan namespacenya common\components, sedangkan pada basic app\components.
Meregisterkan Component
Buka file web.php pada folder config/web.php, tambahkan class component kita.'components' => [ .................................. 'alert' => [ 'class' => 'app\components\AlertComponent', ], .................................
Untuk pengecekan sama seperti template advanced, tambahkan sebuah method untuk testing pada salah satu controller, panggil component itu, terus panggil methodnya.
Begitulah guys tutorialnya intinya component pada yii2 ibarat variabel global yang bisa dipanggil di mana saja, cara pembuatannya cukup mudah, dan nantinya bisa berguna banget untuk projek kita. Kalau ada pertanyaan atau ada yang salah pada artikel silahkan berkomentar guys.