Bekerja dengan Form ================== Bagian ini memaparkan bagaimana membuat halaman dengan form untuk mengambil data dari pengguna. Halaman akan menampilkan form dengan input field Nama dan Email. Setelah mendapatkan dua data dari pengguna, halaman akan menampilkan kembali data yang diinput pada form sebagai konfirmasi. Untuk mencapai tujuan, disamping membuat sebuah [_action_](structure-controllers.md), dan dua [_view_](structure-views.md), anda juga harus membuat [_model_](structure-models.md). Sepanjang tutorial ini, anda akan mempelajari bagaimana cara untuk: * Membuat sebuah [model](structure-models.md) sebagai representasi data yang diinput oleh pengguna melalui form, * Membuat _rules_ untuk memvalidasi data yang telah diinput. * Membuat form HTML di dalam [view](structure-views.md). Membuat Model ---------------- Data yang akan diambil dari pengguna akan direpresentasikan oleh class model `EntryForm` sebagaimana ditunjukkan di bawah dan di simpan pada file `models/EntryForm.php`. Silahkan membaca bagian [Class Autoloading](concept-autoloading.md) untuk penjelasan lengkap mengenai penamaan file class. ```php Info: [[yii\base\Model]] digunakan sebagai _parent_ untuk class model yang tidak berhubungan dengan database. [[yii\db\ActiveRecord]] normalnya digunakan sebagai _parent_ untuk class model yang berhubungan dengan tabel di database. Class `EntryForm` terdiri dari dua _public property_, `name` dan `email`, dimana akan digunakan untuk menyimpan data yang diinput oleh pengguna. Class ini juga terdapat _method_ yang dinamakan `rules()`, yang akan mengembalikan (_return_) sejumlah pengaturan (_rules_) untuk memvalidasi data. Pengaturan validasi (_Validation Rules_) yang di deklarasikan harus mendeskripsikan bahwa * kedua field, yaitu `name` and `email` wajib di input * data `email` harus merupakan alamat email yang valid Jika anda memiliki objek `EntryForm` yang sudah mengandung data yang di input oleh pengguna, anda boleh memanggil method [[yii\base\Model::validate()|validate()]] untuk melaksanakan validasi data. Kegagalan validasi data akan menentukan (_set_) property [[yii\base\Model::hasErrors|hasErrors]] menjadi `true`, dan anda dapat mengetahui pesan kegagalan validasi melalui [[yii\base\Model::getErrors|errors]]. ```php name = 'Qiang'; $model->email = 'bad'; if ($model->validate()) { // Valid! } else { // Tidak Valid! // Panggil $model->getErrors() } ``` Membuat Action ------------------ Selanjutnya, anda harus membuat `entry` _action_ pada controller `site` yang akan memanfaatkan model yang baru saja dibuat. Proses membuat dan menggunakan _action_ dijelaskan pada bagian [Mengatakan Hello](start-hello.md). ```php load(Yii::$app->request->post()) && $model->validate()) { // data yang valid diperoleh pada $model // lakukan sesuatu terhadap $model di sini ... return $this->render('entry-confirm', ['model' => $model]); } else { // menampilkan form pada halaman, ada atau tidaknya kegagalan validasi tidak masalah return $this->render('entry', ['model' => $model]); } } } ``` Pertama-tama, _action_ membuat objek `EntryForm`. Kemudian objek tersebut membangun model menggunakan data dari `$_POST`, yang disediakan oleh Yii dengan method [[yii\web\Request::post()]]. Jika model berhasil dibuat (misal, jika pengguna telah mengirim form HTML), _action_ akan memanggil method [[yii\base\Model::validate()|validate()]] untuk memastikan data yang di input tersebut valid. > Info : _Expression_ `Yii::$app` adalah representasi dari objek [aplikasi](structure-applications.md), dimana objek tersebut adalah _singleton_ yang bebas diakses secara global. Objek tersebut juga merupakan [service locator](concept-service-locator.md) yang menyediakan _components_ seperti `request`, `response`, `db`, dll. untuk mendukung pekerjaan yang spesifik. Pada kode di atas, _component_ `request` dari objek aplikasi digunakan untuk mengakses data `$_POST`. Jika tidak ada error, _action_ akan me-_render_ _view_ bernama `entry-confirm` untuk menginformasikan ke pengguna bahwa pengiriman data tersebut berhasil. Jika tidak ada data yang dikirim atau data tersebut tidak valid, _view_ `entry` yang akan di _render_, dimana form HTML akan ditampilkan, beserta informasi kegagalan pengiriman form tersebut. > Note: Pada contoh sederhana ini kita hanya me-_render_ halaman konfirmasi jika data yang dikirim tersebut valid. Pada prakteknya, anda harus pertimbangkan untuk menggunakan [[yii\web\Controller::refresh()|refresh()]] atau [[yii\web\Controller::redirect()|redirect()]] untuk mencegah [permasalahan pengiriman form](http://en.wikipedia.org/wiki/Post/Redirect/Get). Membuat View -------------- Terakhir, buatlah dua file _view_ dengan nama `entry-confirm` dan `entry`. _View_ ini akan di-_render_ oleh _action_ `entry`, yang sebelumnya dibahas. _View_ `entry-confirm` hanya menampilkan data nama dan email. File _view_ tersebut harus di simpan di `views/site/entry-confirm.php`. ```php
You have entered the following information: