Senin, 18 April 2016
Models di Yii2 (bagian 1)
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:
- 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)
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