Selasa, 19 Juli 2016
Konfigurasi RBAC Yii2 sederhana dan mudah dengan amnah/yii2-user
RBAC (Role-Based Access Control) adalah konsep Access Control di Yii2 yang memisahkan hak akses user berdasarkan role atau peran. Yii2 sendiri sudah dibekali fitur RBAC yang bisa kita aktifkan apabila memerlukannya. Baik itu menggunakan PHP Manager maupun DB Manager.
Fitur RBAC bawaan Yii2 tergolong kompleks atau rumit. Karena memang fitur ini dipersiapkan untuk mendukung pembuatan aplikasi yang kompleks. Namun pada prakteknya, sering-kali kita hanya memerlukan sebagian kecil dari keseluruhan fitur yang diberikan.
Sudah ada banyak plugin module yang dibuat untuk menangani dan me-manage RBAC yang dapat anda pakai dalam aplikasi anda, dan masing-masing memiliki kelebihan dan kekurangan. amnah/yii2-user adalah salah satunya. Module ini adalah module yg saya rasa mudah untuk digunakan oleh pemula.
Fitur yang ditawarkan:
Contohnya:
Secara default, hak akses hanya terdiri dari "admin" saja. Selain itu maka hak akses dianggap user biasa, atau guest jika tanpa login.
Sebagai contoh, misalnya anda membuat sebuah aplikasi inventory, maka secara sederhana kategori akses dapat dibagi menjadi : input data, maintenance data, rekap data.
Maka dalam table role dapat anda tambahkan field : can_input, can_maintenance, can_rekap.
Kemudian tambahkan role dengan nama "kasir" dan field can_admin, can_input, can_maintenance, can_rekap masing-masing bernilai 0,1,0,0.
Dalam contoh diatas, artinya role kasir hanya memiliki hak untuk input data. Setelah role berhasil dibuat, anda tinggal meng-assign role tersebut pada user melalui user administration (http://localhost/aplikasiyii2/web/user).
Dan pada aplikasi anda, anda bisa menggunakan Yii::$app->user->can("input") untuk memeriksa apakah user memiliki hak akses input.
Selengkapnya
Fitur RBAC bawaan Yii2 tergolong kompleks atau rumit. Karena memang fitur ini dipersiapkan untuk mendukung pembuatan aplikasi yang kompleks. Namun pada prakteknya, sering-kali kita hanya memerlukan sebagian kecil dari keseluruhan fitur yang diberikan.
Sudah ada banyak plugin module yang dibuat untuk menangani dan me-manage RBAC yang dapat anda pakai dalam aplikasi anda, dan masing-masing memiliki kelebihan dan kekurangan. amnah/yii2-user adalah salah satunya. Module ini adalah module yg saya rasa mudah untuk digunakan oleh pemula.
Fitur yang ditawarkan:
- Setup cepat.
- Extendable
- Pendaftaran user menggunakan email dan/atau username
- Login dengan email dan/atau username
- Login/register via email (masukkan email > dapatkan link> klik link untuk login/register)
- Email confirmation (+ fungsi resend)
- Social authentication (facebook, twitter, google, linkedin, reddit, vkontakte)
- Account page
- Updates email, username, and password
- Membutuhkan password saat ini
- Profile page
- custom field untuk users, misalnya full_name
- Password recovery
- Admin crud via GridView
Instalasi modul RBAC amnah/yii2-user
- Pastikan Yii2 sudah terinstall dan terkonfigurasi dengan benar.
- Install melalui composer "amnah/yii2-user": "^5.0"
- Update config file config/web.php :
return [ 'components' => [ // NOTE: in the yii2-advanced-app, the user component should be updated in // 'frontend/config/main.php' and/or 'backend/config/main.php' (OR you can add it // to 'common/config' if you remove it from frontend/backend) 'user' => [ 'class' => 'amnah\yii2\user\components\User', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' => true, 'messageConfig' => [ 'from' => ['admin@website.com' => 'Admin'], // this is needed for sending emails 'charset' => 'UTF-8', ] ], ], 'modules' => [ 'user' => [ 'class' => 'amnah\yii2\user\Module', // set custom module properties here ... ], ], ];
- Update file config config/db.php :
// app/config/db.php return [ 'class' => 'yii\db\Connection', // set up db info ];
- Jalankan migrasi :
php yii migrate --migrationPath=@vendor/amnah/yii2-user/migrations
- Buka aplikasi anda di :
http://localhost/aplikasiyii2/web/user
- Login dengan username : neo password : neo.
- Sekarang anda bisa me-manage akun, profile, dan role melalui interface web.
Petunjuk singkat cara menggunakan fitur-fitur modul amnah/yii2-user
Untuk mengecek hak akses, anda bisa memanggil Yii::$app->user->can("admin") dimana "admin" adalah hak akses yang hendak di cek. Apabila user yang sedang login memiliki hak akses "admin", maka fungsi diatas bernilai true dan sebaliknya.Contohnya:
if (!Yii::$app->user->can("admin")) { throw new HttpException(403, 'Maaf, anda tidak mempunyai hak untuk mengakses halaman ini.'); }
Secara default, hak akses hanya terdiri dari "admin" saja. Selain itu maka hak akses dianggap user biasa, atau guest jika tanpa login.
Menambahkan hak akses baru
Hak akses diwakili oleh kolom/field ber-prefix "can_" pada tabel "role" di database. Silahkan anda buka struktur tabel role melalui phpmyadmin atau mysqlworkbench. Maka anda akan melihat ada field yang bernama can_admin. Nah, nilai integer pada kolom itulah yang menentukan apakah peran/role yg bersangkutan memiliki hak akses "admin". Jika bernilai 1, maka peran/role tersebut memiliki hak akses "admin", jika bernilai 0 maka tidak.Sebagai contoh, misalnya anda membuat sebuah aplikasi inventory, maka secara sederhana kategori akses dapat dibagi menjadi : input data, maintenance data, rekap data.
Maka dalam table role dapat anda tambahkan field : can_input, can_maintenance, can_rekap.
Kemudian tambahkan role dengan nama "kasir" dan field can_admin, can_input, can_maintenance, can_rekap masing-masing bernilai 0,1,0,0.
Dalam contoh diatas, artinya role kasir hanya memiliki hak untuk input data. Setelah role berhasil dibuat, anda tinggal meng-assign role tersebut pada user melalui user administration (http://localhost/aplikasiyii2/web/user).
Dan pada aplikasi anda, anda bisa menggunakan Yii::$app->user->can("input") untuk memeriksa apakah user memiliki hak akses input.
Minggu, 12 Juni 2016
Buat migration secara otomatis dari tabel database yang sudah ada | Tutorial Yii2
Pada pengembangan aplikasi web menggunakan framework yang mendukung migrasi, umumnya untuk membuat struktur database kita membuat strukturnya terlebih dahulu pada file migration kemudian menerapkan migration tersebut sehingga menjadi tabel dan record dalam database. Namun bagaimana halnya jika kita terlanjur membuat tabel terlebih dahulu tanpa membuat migrasi?
Pada Yii2, terdapat sebuah utility yang memungkinkan kita untuk mendesain database menggunakan mysql-workbench atau phpmyadmin, kemudian membuat migrasi dari database yang sudah kita buat. Singkatnya, kita meng-auto generate script migration dari tabel dan record yang sudah ada.
Untuk instalasi, anda bisa menggunakan composer dengan perintah:
Kemudian tambahkan :
Sekarang silahkan anda akses aplikasi anda melalui browser dengan alamat route "utility".(http://[path web anda]/utility atau tanpa prettyurl http://[path web anda]/?r=utility)
Pada contoh screenshot diatas, saya mencoba membuat migration dari tabel user (Tables=user) tanpa menambahkan insert record (Add Table Inserts=No). Dan hasilnya adalah script untuk method up() dan down() seperti nampak pada 2 screenshot berikut:
Selengkapnya
Pada Yii2, terdapat sebuah utility yang memungkinkan kita untuk mendesain database menggunakan mysql-workbench atau phpmyadmin, kemudian membuat migrasi dari database yang sudah kita buat. Singkatnya, kita meng-auto generate script migration dari tabel dan record yang sudah ada.
Yii2 Migration Utility
Yii2 Migration utility adalah tools GUI untuk membuat table statement untuk migrasi. Mendukung database MySQL, MsSQL, PgSQL, SQLite. Utility ini dapat secara otomatis meng-generate tabel, kolom, tipe kolom, default, primary key, composite key, foreign key, index dan data tabel.Untuk instalasi, anda bisa menggunakan composer dengan perintah:
php composer.phar require --prefer-source "c006/yii2-migration-utility" "dev-master"Atau dengan menambahkan dependensi:
"c006/yii2-migration-utility": "dev-master"pada file composer.json
Kemudian tambahkan :
'utility' => [ 'class' => 'c006\utility\migration\Module', ],didalam
'modules' => [ ],pada file config/web.php atau config/main.php (advanced).
Sekarang silahkan anda akses aplikasi anda melalui browser dengan alamat route "utility".(http://[path web anda]/utility atau tanpa prettyurl http://[path web anda]/?r=utility)
Pada contoh screenshot diatas, saya mencoba membuat migration dari tabel user (Tables=user) tanpa menambahkan insert record (Add Table Inserts=No). Dan hasilnya adalah script untuk method up() dan down() seperti nampak pada 2 screenshot berikut:
Senin, 23 Mei 2016
Instalasi Template AdminLTE di Yii2 menggunakan composer
Secara default, Yii2 dibekali oleh template Bootstrap 3. Namun kita juga bisa menambahkan template lain yang lebih baik, seperti misalnya template Admin LTE.
AdminLTE adalah template admin responsive yang berbasis framework Bootstrap 3. Yang sangat mudah untuk digunakan dan dikustomasi. Fitur responsive menjadikan template ini cocok untuk berbagai macam ukuran layar dari layar smarphone yang kecil, hingga layar desktop.
Untuk menginstall AdminLTE pada Yii2, kita bisa menggunakan asset bundle yang sudah disediakan oleh dmstr yaitu dmstr/yii2-adminlte-asset sehingga kita dapat dengan mudah menginstallnya dengan composer.
Untuk menginstall AdminLTE v2 gunakan perintah berikut
Atau untuk AdminLTE v2 gunakan perintah berikut
pada direktori instalasi Yii2.
Setelah instalasi berhasil, anda bisa mencoba tampilan demo template tanpa mempengaruhi project anda dengan cara menambahkan rule berikut pada config anda:
Pastikan konfigurasi disalin kedalam array components.
Untuk template basic, file konfigurasi ada di:
/config/web.php
Konfigurasi untuk template advanced ada di:
/frontend/config/main.php (untuk frontend)
Atau
/backend/config/main.php (untuk backend)
Atau
/common/config/main.php (untuk semuanya)
Kemudian silahkan lihat hasilnya pada browser pada alamat root.
Saat ini, anda sedang melihat tampilan demo dari AdminLTE, Bukan project anda sesungguhnya.
Untuk menerapkannya pada project anda, silahkan copy file view dari vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app kedalam direktori view anda.
lalu tambahkan helper AdminLteHelper::skinClass() pada tag body di view:
Berikut adalah list dari skin yang tersedia:
Selengkapnya
AdminLTE adalah template admin responsive yang berbasis framework Bootstrap 3. Yang sangat mudah untuk digunakan dan dikustomasi. Fitur responsive menjadikan template ini cocok untuk berbagai macam ukuran layar dari layar smarphone yang kecil, hingga layar desktop.
Untuk menginstall AdminLTE pada Yii2, kita bisa menggunakan asset bundle yang sudah disediakan oleh dmstr yaitu dmstr/yii2-adminlte-asset sehingga kita dapat dengan mudah menginstallnya dengan composer.
Instalasi AdminLTE Yii2 dengan composer
Pastikan terlebih dahulu bahwa composer sudah terinstall.Untuk menginstall AdminLTE v2 gunakan perintah berikut
php composer.phar require dmstr/yii2-adminlte-asset "2.*"
Atau untuk AdminLTE v2 gunakan perintah berikut
php composer.phar require dmstr/yii2-adminlte-asset "1.*"
pada direktori instalasi Yii2.
Setelah instalasi berhasil, anda bisa mencoba tampilan demo template tanpa mempengaruhi project anda dengan cara menambahkan rule berikut pada config anda:
'components' => [ 'view' => [ 'theme' => [ 'pathMap' => [ '@app/views' => '@vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app' ], ], ], ],
Pastikan konfigurasi disalin kedalam array components.
Untuk template basic, file konfigurasi ada di:
/config/web.php
Konfigurasi untuk template advanced ada di:
/frontend/config/main.php (untuk frontend)
Atau
/backend/config/main.php (untuk backend)
Atau
/common/config/main.php (untuk semuanya)
Kemudian silahkan lihat hasilnya pada browser pada alamat root.
Saat ini, anda sedang melihat tampilan demo dari AdminLTE, Bukan project anda sesungguhnya.
Untuk menerapkannya pada project anda, silahkan copy file view dari vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app kedalam direktori view anda.
Ingat, anda akan me-replace file view layout dan site anda yang lama. pastikan backup dulu file view lama anda atau lakukan langkah-langkah instalasi template ini di awal, setelah anda menginstall Yii2 dan sebelum anda mengkustomasi view.Penting: Jangan lupa untuk menghapus config yang ditambahkan untuk demo diatas.
Merubah Skin AdminLTE di Yii2
Secara default, AdminLTE akan menggunakan skin blue, anda bisa merubanya dengan menambahkan config: 'assetManager' => [
'bundles' => [
'dmstr\web\AdminLteAsset' => [
'skin' => 'skin-black',
],
],
],
lalu tambahkan helper AdminLteHelper::skinClass() pada tag body di view:
<body class="<?= \dmstr\helpers\AdminLteHelper::skinClass() ?>">
Berikut adalah list dari skin yang tersedia:
skin-blue, skin-black, skin-red, skin-yellow, skin-purple, skin-green, skin-blue-light, skin-black-light, kin-red-light, skin-yellow-light, skin-purple-light, skin-green-light
Minggu, 01 Mei 2016
Tutorial Yii2 Membuat Dropdown list menggunakan activeform dan model
Tidak ada komentar
:
Diposting oleh
gema
di
05.12
Label:
Tips Yii2
,
Troubleshooting
,
Tutorial Yii2
Berbeda dengan Yii1. Untuk membuat Dropdown list dengan activeform dan model di yii2 kita bisa menggunakan ArrayHelper, Yang merupakan pengganti dari CHtml list data pada yii1.
Nah untuk membuat dropdown list dengan bantuan ArrayHelper cukup mudah, pada dasarnya seperti berikut:
Penjelasannya,
Pertama, kita perlu memanggil / memuat class ArrayHelper itu sendiri. dengan:
Kemudian buat sebuah variabel untuk mendefinisikan object array yang memuat list data (dalam contoh diatas adalah data kota).
Terakhir buat field berdasarkan model dan berjenis dropDownList, kemudian masukkan variable data kota ($dataList) tadi sebagai parameter pertama, dan array untuk placeholder pada parameter kedua.
Peta-kan data list yang hendak ditampilkan menggunakan ArrayHelper,
Semoga bermanfaat.
Selengkapnya
Nah untuk membuat dropdown list dengan bantuan ArrayHelper cukup mudah, pada dasarnya seperti berikut:
use yii\helpers\ArrayHelper; use app\models\Kota; ..... $dataList=ArrayHelper::map(Kota::find()->asArray()->all(), 'id', 'namaKota'); field($model, 'center_id')->dropDownList($dataList, ['prompt'=>'-Pilih Kota-']) ?>
Penjelasannya,
Pertama, kita perlu memanggil / memuat class ArrayHelper itu sendiri. dengan:
use yii\helpers\ArrayHelper;
Baris kedua adalah untuk memuat model, selengkapnya bisa anda baca pada Models di Yii2.
Kemudian buat sebuah variabel untuk mendefinisikan object array yang memuat list data (dalam contoh diatas adalah data kota).
Terakhir buat field berdasarkan model dan berjenis dropDownList, kemudian masukkan variable data kota ($dataList) tadi sebagai parameter pertama, dan array untuk placeholder pada parameter kedua.
Cara ke 2
Penggunakan activeDropDownList.Peta-kan data list yang hendak ditampilkan menggunakan ArrayHelper,
use yii\helpers\ArrayHelper; use app\models\Kota;
...
$items = ArrayHelper::map(Kota::find()->all(), 'id', 'namaKota'); ... return $this->render('nama_view',['model'=>$model, 'items'=>$items]);Lalu render View yang meng-generate elemen html dengan html helper activeDropDownList
<?= Html::activeDropDownList($model, 'id',$items) ?>Sekian tutorial singkat untuk membuat Dropdown list menggunakan activeform dan model di Yii2.
Semoga bermanfaat.
Senin, 18 April 2016
Models di Yii2 (bagian 1)
Tidak ada komentar
:
Diposting oleh
gema
di
21.04
Label:
Model
,
Panduan Yii2
,
Struktur Aplikasi Yii2
,
Tutorial Yii2
Model adalah bagian dari arsitektur MVC. Model merupakan object yang mewakili bussiness data, rules dan logika.
Anda dapat membuat class model dengan meng-extend yii\base\Model atau child class nya. Base class yii\base\Model mendukung beberapa fitur yang berguna antara lain:
Anda dapat mengakses atribut seperti mengakses properti pada object biasa:
Anda dapat mendapatkan label dari attribute dengan memanggil yii\base\Model::getAttributeLabel(). Contohnya :
Jika anda tidak ingin menggunakan label yang di auto generate. anda dapat melakukan override dengan mendeklarasikan attribute label. contohnya :
Dalam skenario berbeda, model dapat menggunakan beberapa rules dan logika. Contohnya attribute email mungkin dibutuhkan untuk pendaftaran user, tetapi tidak digunakan untuk login.
Sebuah model menggunakan properti yii\base\Model::$scenario untuk mengenali scenario yang sedang digunakan. Secara default, sebuah model mendukung hanya satu scenario yaitu default. Kode berikut menunjukkan dua cara untuk mengatur scenario dari sebuah model:
Secara default, scenario yang didukung oleh model ditentukan dengan validation rules yang dideklarasikan dalam model.
Bagaimanapun, anda dapat mengkustomisasinya dengan meng-override method yii\base\Model::scenarios() seperti pada kode berikut:
Method scenarios() me-return sebuah array dimana key nya adalah nama scenario dan nilanya adalah active attributes. Sebuah active attribute dapat ditentukan secara masal dan sesuai dengan validasi.
Pada contoh diatas, attribut username dan password aktif pada scenario login, sementara pada scenario register, disamping username dan password, attribut email juga aktif.
Implementasi dari scenario() secara default akan me-return semua scenario yang ditemukan dalam method deklarasi validation rule yii\base\Model::rules().
Contohnya, pada model ContactForm, anda ingin memastikan semua atribut tidak kosong dan attribut email memuat alamat email yang valid. Jika nilai dari beberapa attribut tidak sesuai dengan aturan, maka pesan error akan ditampilkan untuk membantu user mengetahui kesalahannya.
Anda bisa memanggil yii\base\Model::validate() untuk mem-validasi data yang diterima. Method akan menggunakan rule validasi yang dideklarasikan di yii\base\Model::rules() untuk mem-validasi setiap atribute relevan. Jika tidak ada error yang ditemukan, method tersebut akan bernilai true. Sebaliknya, jika terdapat error, maka error tersebut akan disimpan dalam property yii\base\Model::$errors dan bernilai false. Contoh :
Untuk mendeklrasikan validation rules pada sebuah model, override method yii\base\Model::rules() dengan me-return rule-rule yang harus dipenuhi model attribute. Contoh dibawah ini menampilkan validation rules yang dideklarasikan untuk model ContactForm:
Sebuah rule dapat digunakan untuk memvalidasi satu atau beberapa attribute dan sebuah attribute dapat divalidasi dengan satu atau beberapa rule.
Terkadang, anda membutuhkan rule untuk diterapkan hanya pada scenario tertentu. Untuk itu, anda dapat menentukan property on dari sebuah rule, seperti pada contoh berikut:
Jika anda tidak menentukan property on, aturan tersebut akan berlaku untuk semua scenario. Sebuah rule disebut sebagai active rule jika diterapkan pada scenario saat ini.
Bersambung ke Models di Yii2 (bagian 2)
Selengkapnya
Anda dapat membuat class model dengan meng-extend yii\base\Model atau child class nya. Base class yii\base\Model mendukung beberapa fitur yang berguna antara lain:
- Attributes: mewakili bussiness data dan dapat diakses seperti properti object normal atau elemen array.
- Attribute labels: menentukan tampilan label untuk tiap attribut.
- Massive assignment: mendukung pengisian banyak attribut dalam satu langkah.
- Validation rules: memastikan data yang diinputkan sesuai dengan aturan.
- Data Exporting: memungkinkan data model untuk di ekspor kedalam array dengan format yang dapat disesuaikan.
Anda tidak diharuskan untuk menggunakan base class yii\base\Model. Akan tetapi karena ada banyak komponen Yii yang dibuat untuk mendukung yii\base\Model, sangat disarankan untuk menjadikannya base class untuk model.
Attribute model yii2
Models mewakili business data dalam bentuk attributes. Setiap atribute dapat dianggap seperti property model yang dapat diakses secara publik. Method yii\base\Model::attributes() menentukan attribut apa yang dimiliki oleh model.Anda dapat mengakses atribut seperti mengakses properti pada object biasa:
$model = new \app\models\ContactForm; // "name" is an attribute of ContactForm $model->name = 'example'; echo $model->name;Anda dapat juga mengakses attribute seperti mengakses element array dengan menggunakan dukungan ArrayAccess dan ArrayIterator yang disediakan oleh yii\base\Model:
$model = new \app\models\ContactForm; // accessing attributes like array elements $model['name'] = 'example'; echo $model['name']; // iterate attributes foreach ($model as $name => $value) { echo "$name: $value\n"; }
Mendefinisikan Attribute model yii2
Secara default, jika model class meng-extend secara langsung dari yii\base\Model, semua member variable non-static public adalah merupakan attributes. Sebagai contoh, model class ContactForm dibawah ini memiliki 4 attribute: name, email, subject dan body. Model ContactForm digunakan untuk mewakili input data yang diterima dari form HTML.namespace app\models; use yii\base\Model; class ContactForm extends Model { public $name; public $email; public $subject; public $body; }Anda dapat melakukan override pada yii\base\Model::attributes() untuk mendefinisikan attribut dengan cara lain. Method harus me-return nama dari attributes dalam model. Sebagai contoh, yii\db\ActiveRecord melakukannya dengan me-return nama kolom. Perlu dicatat bahwa anda juga perlu untuk melakukan override pada magic methods seperti __get(), __set() sehingga attribute dapat diakses seperti properti object pada umumnya.
Attribute Label
Ketika menampilkan nilai atau mengambil input untuk attribut, seringkali anda perlu untuk menampilkan label yang berhubungan dengan atribut. Contohnya atribut firstName biasanya diberi label First Name sehingga kolom inputan dapat dengan mudah dimengerti oleh pengguna.Anda dapat mendapatkan label dari attribute dengan memanggil yii\base\Model::getAttributeLabel(). Contohnya :
$model = new \app\models\ContactForm; // displays "Name" echo $model->getAttributeLabel('name');Secara default, attribute label akan otomatis di generate dari nama attribute. Dimana nama attribut yang berbentuk camel case akan di pisah spasi untuk setiap kata. contohnya firstName menjadi First Name.
Jika anda tidak ingin menggunakan label yang di auto generate. anda dapat melakukan override dengan mendeklarasikan attribute label. contohnya :
namespace app\models; use yii\base\Model; class ContactForm extends Model { public $name; public $email; public $subject; public $body; public function attributeLabels() { return [ 'name' => 'Your name', 'email' => 'Your email address', 'subject' => 'Subject', 'body' => 'Content', ]; } }Untuk aplikasi yang mendukung multi bahasa, anda dapat menggunakan method attributeLabels() seperti contoh:
public function attributeLabels() { return [ 'name' => \Yii::t('app', 'Your name'), 'email' => \Yii::t('app', 'Your email address'), 'subject' => \Yii::t('app', 'Subject'), 'body' => \Yii::t('app', 'Content'), ]; }
Scenario
Model dapat digunakan dalam bebagai scenario (skenario). Contohnya, model User digunakan untuk mendapakan input login user, tetapi juga bisa digunakan untuk registrasi user.Dalam skenario berbeda, model dapat menggunakan beberapa rules dan logika. Contohnya attribute email mungkin dibutuhkan untuk pendaftaran user, tetapi tidak digunakan untuk login.
Sebuah model menggunakan properti yii\base\Model::$scenario untuk mengenali scenario yang sedang digunakan. Secara default, sebuah model mendukung hanya satu scenario yaitu default. Kode berikut menunjukkan dua cara untuk mengatur scenario dari sebuah model:
// scenario diatur sebagai sebuah property $model = new User; $model->scenario = User::SCENARIO_LOGIN; // scenario diatur melalui konfigurasi $model = new User(['scenario' => User::SCENARIO_LOGIN]);
Secara default, scenario yang didukung oleh model ditentukan dengan validation rules yang dideklarasikan dalam model.
Bagaimanapun, anda dapat mengkustomisasinya dengan meng-override method yii\base\Model::scenarios() seperti pada kode berikut:
namespace app\models; use yii\db\ActiveRecord; class User extends ActiveRecord { const SCENARIO_LOGIN = 'login'; const SCENARIO_REGISTER = 'register'; public function scenarios() { return [ self::SCENARIO_LOGIN => ['username', 'password'], self::SCENARIO_REGISTER => ['username', 'email', 'password'], ]; } }
Method scenarios() me-return sebuah array dimana key nya adalah nama scenario dan nilanya adalah active attributes. Sebuah active attribute dapat ditentukan secara masal dan sesuai dengan validasi.
Pada contoh diatas, attribut username dan password aktif pada scenario login, sementara pada scenario register, disamping username dan password, attribut email juga aktif.
Implementasi dari scenario() secara default akan me-return semua scenario yang ditemukan dalam method deklarasi validation rule yii\base\Model::rules().
Validation Rules
Ketika data untuk model diterima dari end user, data tersebut harus divalidasi agar sesuai dengan aturan-aturan yang disebut validation rules atau bussiness rules.Contohnya, pada model ContactForm, anda ingin memastikan semua atribut tidak kosong dan attribut email memuat alamat email yang valid. Jika nilai dari beberapa attribut tidak sesuai dengan aturan, maka pesan error akan ditampilkan untuk membantu user mengetahui kesalahannya.
Anda bisa memanggil yii\base\Model::validate() untuk mem-validasi data yang diterima. Method akan menggunakan rule validasi yang dideklarasikan di yii\base\Model::rules() untuk mem-validasi setiap atribute relevan. Jika tidak ada error yang ditemukan, method tersebut akan bernilai true. Sebaliknya, jika terdapat error, maka error tersebut akan disimpan dalam property yii\base\Model::$errors dan bernilai false. Contoh :
$model = new \app\models\ContactForm; // isi model attribute dengan inputan user $model->attributes = \Yii::$app->request->post('ContactForm'); if ($model->validate()) { // Jika semua input valid } else { // validasi gagal: $errors menjadi array yang memuat semua pesan error $errors = $model->errors; }
Untuk mendeklrasikan validation rules pada sebuah model, override method yii\base\Model::rules() dengan me-return rule-rule yang harus dipenuhi model attribute. Contoh dibawah ini menampilkan validation rules yang dideklarasikan untuk model ContactForm:
public function rules() { return [ // attribute name, email, subject dan body dibutuhkan [['name', 'email', 'subject', 'body'], 'required'], // attribute email harus alamat email valid ['email', 'email'], ]; }
Sebuah rule dapat digunakan untuk memvalidasi satu atau beberapa attribute dan sebuah attribute dapat divalidasi dengan satu atau beberapa rule.
Terkadang, anda membutuhkan rule untuk diterapkan hanya pada scenario tertentu. Untuk itu, anda dapat menentukan property on dari sebuah rule, seperti pada contoh berikut:
public function rules() { return [ // username, email dan password dibutuhkan dalam scenario "register" [['username', 'email', 'password'], 'required', 'on' => self::SCENARIO_REGISTER], // username dan password dibutuhkan dalam scenario "login" [['username', 'password'], 'required', 'on' => self::SCENARIO_LOGIN], ]; }
Jika anda tidak menentukan property on, aturan tersebut akan berlaku untuk semua scenario. Sebuah rule disebut sebagai active rule jika diterapkan pada scenario saat ini.
Bersambung ke Models di Yii2 (bagian 2)
Kamis, 10 Maret 2016
Penjelasan Tentang Controller di Yii2
Tidak ada komentar
:
Diposting oleh
gema
di
19.06
Label:
Panduan Yii2
,
Struktur Aplikasi Yii2
,
Tutorial 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.
Contoh berikut adalah controller post dengan 2 actions yaitu view dan create.
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.
Kode berikut mendefinisikan sebuah controller site:
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.
Anda dapat mengubah defaultnya dengan konfigurasi aplikasi berikut:
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:
Aturan karakter untuk action id sama dengan Controller ID, kecuali untuk tanda slash. Karena tidak ada
slash di dalam action ID.
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.
Pada contoh berikut, action view mendeklarasikan 2 parameter : $id dan $version.
Secara default, default action adalah index. Jika anda ingin merubah defaultnya, anda bisa meng-override menggunakan property seperti pada contoh berikut:
Berikut adalah beberapa penerapan terbaik untuk controller:
Selengkapnya
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.
Senin, 07 Maret 2016
Komponen Aplikasi Yii2
Tidak ada komentar
:
Diposting oleh
gema
di
19.52
Label:
Panduan Yii2
,
Struktur Aplikasi Yii2
,
Tutorial Yii2
Aplikasi merupakan service locator. Yang menjadi tuan rumah dari komponen aplikasi yang menyediakan service bermacam-macam untuk memproses request. Contohnya, komponen urlManager bertanggung jawab untuk me-routing web request kepada controller yang bersangkutan, komponen db menyediakan layanan yang berhubungan dengan database, dan lain sebagainya.
Setiap komponen aplikasi memiliki sebuah ID yang membedakan antar komponen dalam satu aplikasi. Anda dapat mengakses komponen aplikasi melalui expression
Sebuah komponen aplikasi dibuat pertama kali ketika diakses dengan menggunakan expression diatas. Akses-akses berikutnya akan me-return instance component yang sama.
Komponen aplikasi dapat berupa object apapun. Anda dapat me-registernya dengan mengkonfigurasi properti yii\base\Application::$components dalam konfigurasi aplikasi. Contohnya:
Apabila anda menghendaki untuk menginstansikan komponen aplikasi untuk setiap request meskipun tidak selalu di butuhkan. Anda bisa mendaftarkan ID komponennya kedalam property bootstrap aplikasi.
Sebagai contoh, berikut adalah konfigurasi aplikasi yang mengatur bahwa komponen log akan selalu dimua:
Berikut adlalah daftar komponen-komponen inti / dasar. Anda bisa mengkonfigurasi dan mengkustomasinya sesuai kebutuhan anda seperti layaknya komponen-komponen aplikasi biasa.
Selengkapnya
Setiap komponen aplikasi memiliki sebuah ID yang membedakan antar komponen dalam satu aplikasi. Anda dapat mengakses komponen aplikasi melalui expression
\Yii::$app->componentID
Sebagai contoh, anda dapat menggunakan \Yii::$app->componentID untuk mendapatkan koneksi Database, dan \Yii::$app->cache untuk mendapatkan cache yang didaftarkan oleh aplikasi.Sebuah komponen aplikasi dibuat pertama kali ketika diakses dengan menggunakan expression diatas. Akses-akses berikutnya akan me-return instance component yang sama.
Komponen aplikasi dapat berupa object apapun. Anda dapat me-registernya dengan mengkonfigurasi properti yii\base\Application::$components dalam konfigurasi aplikasi. Contohnya:
[ 'components' => [ // register "cache" component using a class name 'cache' => 'yii\caching\ApcCache', // register "db" component using a configuration array 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=demo', 'username' => 'root', 'password' => '', ], // register "search" component using an anonymous function 'search' => function () { return new app\components\SolrService; }, ], ]
Bootstrapping Komponen
Seperti yang sudah disebutkan diatas, komponen aplikasi akan di instansikan ketika diakses pertama kali. Jika pada saat proses komponen tidak diakses sama sekali, komponen tersebut tidak akan di instansikan.Apabila anda menghendaki untuk menginstansikan komponen aplikasi untuk setiap request meskipun tidak selalu di butuhkan. Anda bisa mendaftarkan ID komponennya kedalam property bootstrap aplikasi.
Sebagai contoh, berikut adalah konfigurasi aplikasi yang mengatur bahwa komponen log akan selalu dimua:
[ 'bootstrap' => [ 'log', ], 'components' => [ 'log' => [ // configuration for "log" component ], ], ]
Komponen Aplikasi Inti
Yii mendefinisikan beberapa komponen aplikasi inti / dasar dengan ID tetap dan konfigurasi default. Contohnya , komponen request digunakan untuk mengumpulkan informasi dari user request dan meneruskannya kepada route, komponen db mewakili koneksi database dimana anda bisa melakukan query database. Dengan bantuan komponen-komponen dasar tersebut, aplikasi Yii dapat mengolah request user.Berikut adlalah daftar komponen-komponen inti / dasar. Anda bisa mengkonfigurasi dan mengkustomasinya sesuai kebutuhan anda seperti layaknya komponen-komponen aplikasi biasa.
- assetManager : me-manage asset bundle dan publishing asset.
- db : merupakan komponen yang digunakan untuk koneksi database dan melakukan query database.
Membutuhkan konfigurasi untuk koneksi database yang bisa anda atur dalam file konfigurasi db. - errorHandler : Meng-handle PHP errors dan exception.
- formatter : digunakan untuk men-format data yang hendak ditampilkan kepada end user. Contohnya data angka, mata uang, tanggal, dll.
- i18n : dukungan penerjemahan translasi dan formatting pesan.
- log : me-manage log target.
- mail : dukungan pengiriman dan penerimaan mail.
- response : untuk mewakili response yang dikirim kepada end user.
- request : untuk mewakili request yang diterima dari end user.
- session : mewakili informasi sesi.
- urlManager : dukungan parsing URL dan pembuatan URL.
- user : mewakili informasi otentikasi user.
- view : dukungan view rendering.
Langganan:
Postingan
(
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