Form Model

6
THE DEFINITIVE GUIDE TO YII LANGUAGE & VERSION SEARCH IN THIS TUTORIAL Memulai Tinjauan Fitur Baru Upgrade dari 1.0 ke 1.1 Apa itu Yii Instalasi Konfigurasi Apache and Nginx Membuat Aplikasi Yii Pertama Fundamental Model-View-Controller (MVC) Entry Script Aplikasi Controller Model View Komponen Alias Path dan Namespace Module Konvensi Alur Kerja Pengembangan Praktek MVC Terbaik Bekerja dengan Form Tinjauan » Membuat Model « Membuat Aksi Membuat Form Mengoleksi Input Tabel Penggunaan Form Builder Bekerja dengan Database Tinjauan Database Access Objects Query Builder Rekaman Aktif Rekaman Aktif Relasional Migrasi Database Caching Tinjauan Caching Data Caching Fragmen Caching Halaman Konten Dinamis Memperluas Yii Membuat Model Mendefinisikan Kelas Model 1. Mendeklarasikan Aturan Validasi 2. Mengamankan Penempatan Atribut 3. Memicu Validasi 4. Mengambil Kesalahan Validasi 5. Label Atribut 6. Sebelum menulis kode HTML yang diperlukan oleh sebuah form, kita harus menetapkan jenis data apa yang diharapkan dari pengguna akhir dan aturan apa pada data ini harus diterapkan. Kelas model dapat dipakai guna menyimpan informasi ini. Model, seperti yang didefinisikan dalam subseksi Model, adalah tempat utama untuk menyimpan input pengguna dan memvalidasinya. Tergantung pada bagaimana kita menggunakan input pengguna, kita bisa membuat dua jenis model. Jika input pengguna dikumpulkan, dipakai dan kemudian diabaikan, kita bisa membuat model form; jika input pengguna dikumpulkan dan disimpan ke dalam database, sebaliknya kita dapat menggunakan active record. Kedua jenis model berbagi basis kelas CModel yang sama yang mendefinisikan antar muka umum yang diperlukan oleh form. Catatan: Kita menggunakan model form terutama dalam contoh pada bagian ini. Akan tetapi, hal yang sama bisa juga diterapkan pada model active record. 1. Mendefinisikan Kelas Model Di bawah ini kita membuat kelas model LoginForm yang dipakai untuk mengumpulkan input pengguna pada halaman login. Karena informasi login hanya dipakai untuk mengotentikasi pengguna dan tidak perlu menyimpan, kita membuat LoginForm sebagai sebuah model form. class LoginForm extends CFormModel { public $username; public $password; public $rememberMe=false; } Tiga atribut dideklarasikan dalam LoginForm: $username, $password dan $rememberMe. Ini dipakai untuk memelihara nama pengguna dan kata sandi yang dimasukkan, dan opsi apakah pengguna menginginkan untuk mengingat login-nya. Karena $rememberMe memiliki nilai standar false, opsi terkait saat awal ditampilkan dalam form login tidak akan dicentang. Info: Alih-alih memanggil properi variabel anggota ini, kita menggunakan nama attributes untuk membedakannya dari properti normal. Atribut adalah properti yang terutama dipakai untuk menyimpan data yang berasal dari input pengguna atau database. 2. Mendeklarasikan Aturan Validasi Setelah pengguna mengirimkan inputnya dan model sudah dipopulasi, kita perlu memastikan bahwa input benar sebelum menggunakannya. Ini dikerjakan dengan melakukan validasi input terhadap satu set aturan. Kita menetapkan aturan validasi dalam metode rules() yang harus mengembalikan array konfigurasi aturan. DOCUMENTATION Take the Tour Tutorials Class Reference Wiki Screencasts Resources demos · guide · class reference · wiki · extensions · forum · live chat · log Bahasa Indonesia 1.1 about downloads documentation development community Bekerja dengan Form: Membuat Model | The Definitive Guide to Yii | ... http://www.yiiframework.com/doc/guide/1.1/id/form.model 1 of 6 27/02/2014 19:52

description

Form Model Yii Framework

Transcript of Form Model

  • THE DEFINITIVE GUIDE TO YII

    LANGUAGE & VERSIO N

    SEARC H IN THIS TUTOR IAL

    MemulaiTinjauan

    Fitur Baru

    Upgrade dari 1.0 ke 1.1

    Apa itu Yii

    Instalasi

    Konfigurasi Apache and Nginx

    Membuat Aplikasi Yii Pertama

    FundamentalModel-View-Controller (MVC)

    Entry Script

    Aplikasi

    Controller

    Model

    View

    Komponen

    Alias Path dan Namespace

    Module

    Konvensi

    Alur Kerja Pengembangan

    Praktek MVC Terbaik

    Bekerja dengan FormTinjauan

    Membuat Model

    Membuat Aksi

    Membuat Form

    Mengoleksi Input Tabel

    Penggunaan Form Builder

    Bekerja dengan DatabaseTinjauan

    Database Access Objects

    Query Builder

    Rekaman Aktif

    Rekaman Aktif Relasional

    Migrasi Database

    CachingTinjauan

    Caching Data

    Caching Fragmen

    Caching Halaman

    Konten Dinamis

    Memperluas Yii

    Membuat Model

    Mendefinisikan Kelas Model1.

    Mendeklarasikan Aturan Validasi2.

    Mengamankan Penempatan Atribut3.

    Memicu Validasi4.

    Mengambil Kesalahan Validasi5.

    Label Atribut6.

    Sebelum menulis kode HTML yang diperlukan oleh sebuahform, kita harus menetapkan jenis data apa yang diharapkandari pengguna akhir dan aturan apa pada data ini harusditerapkan. Kelas model dapat dipakai guna menyimpaninformasi ini. Model, seperti yang didefinisikan dalam subseksi Model, adalah tempat utama untuk menyimpaninput pengguna dan memvalidasinya.

    Tergantung pada bagaimana kita menggunakan input pengguna, kita bisa membuat dua jenis model. Jika inputpengguna dikumpulkan, dipakai dan kemudian diabaikan, kita bisa membuat model form; jika input penggunadikumpulkan dan disimpan ke dalam database, sebaliknya kita dapat menggunakan active record. Kedua jenismodel berbagi basis kelas CModel yang sama yang mendefinisikan antar muka umum yang diperlukan olehform.

    Catatan: Kita menggunakan model form terutama dalam contoh pada bagian ini. Akan tetapi, halyang sama bisa juga diterapkan pada model active record.

    1. Mendefinisikan Kelas ModelDi bawah ini kita membuat kelas model LoginForm yang dipakai untuk mengumpulkan input pengguna padahalaman login. Karena informasi login hanya dipakai untuk mengotentikasi pengguna dan tidak perlumenyimpan, kita membuat LoginForm sebagai sebuah model form.

    class LoginForm extends CFormModel{

    public $username;public $password;public $rememberMe=false;

    }

    Tiga atribut dideklarasikan dalam LoginForm: $username, $password dan $rememberMe. Ini dipakai untukmemelihara nama pengguna dan kata sandi yang dimasukkan, dan opsi apakah pengguna menginginkan untukmengingat login-nya. Karena $rememberMe memiliki nilai standar false, opsi terkait saat awal ditampilkan dalamform login tidak akan dicentang.

    Info: Alih-alih memanggil properi variabel anggota ini, kita menggunakan nama attributes untukmembedakannya dari properti normal. Atribut adalah properti yang terutama dipakai untukmenyimpan data yang berasal dari input pengguna atau database.

    2. Mendeklarasikan Aturan ValidasiSetelah pengguna mengirimkan inputnya dan model sudah dipopulasi, kita perlu memastikan bahwa input benarsebelum menggunakannya. Ini dikerjakan dengan melakukan validasi input terhadap satu set aturan. Kitamenetapkan aturan validasi dalam metode rules() yang harus mengembalikan array konfigurasi aturan.

    DOCUMENTATION Take the Tour Tutorials Class Reference Wiki Screencasts Resources

    demos guide class reference wiki extensions forum live chat login

    Bahasa Indonesia 1.1

    about downloads documentation development community

    Bekerja dengan Form: Membuat Model | The Definitive Guide to Yii | ... http://www.yiiframework.com/doc/guide/1.1/id/form.model

    1 of 6 27/02/2014 19:52

  • Tinjauan

    Menggunakan Extension

    Membuat Extension

    Menggunakan Pustaka PihakKetiga

    Uji CobaTinjauan

    Mendefinisi Fixture

    Uji Coba Unit

    Uji Coba Fungsional

    Topik KhususPenghasil Kode Otomatis

    Manajemen URL

    Otentikasi dan Otorisasi

    Tema dan Skin

    Pencatatan

    Penanganan Error

    Layanan Web

    Internasionalisasi (I18N)

    Sintaks Template Alternatif

    Aplikasi Konsol

    Keamanan

    Pengaturan Kinerja

    Menghasilkan Kode denganCommand LineTools(deprecated)

    class LoginForm extends CFormModel{

    public $username;public $password;public $rememberMe=false;

    private $_identity;

    public function rules(){

    return array(array('username, password', 'required'),array('rememberMe', 'boolean'),array('password', 'authenticate'),

    );}

    public function authenticate($attribute,$params){

    $this->_identity=new UserIdentity($this->username,$this->password);if(!$this->_identity->authenticate())

    $this->addError('password','Incorrect username or password.');}

    }

    Contoh kode di atas menetapkan bahwa username dan password keduanya diperlukan, password harusdiotentikasi.

    Setiap aturan yang dikembalikan oleh rules() harus dalam format berikut:

    array('AttributeList', 'Validator', 'on'=>'ScenarioList', ...opsi tambahan)

    di mana AttributeList adalah string nama atribut yang dipisahkan dengan koma yang perlu divalidasi sesuaidengan aturan; Validator menetapan jenis validasi apa yang harus dilakukan; parameter on adalah opsionalyang menetapkan daftar skenario di mana aturan harus diterapkan; dan opsi tambahan adalah pasangannama-nilai yang dipakai untuk menginisialisasi nilai properti validator terkait.

    Ada tiga cara untuk menetapkan Validator dalam aturan validasi. Pertama, Validator dapat berupa namametode dalam kelas model, seperti authenticate dalam contoh di atas. Metode validator harus berupa tandatangan berikut:

    /** * @param string $attribute nama atribut yang akan divalidasi * @param array $params opsi yang ditentukan di dalam peraturan validasi*/

    public function ValidatorName($attribute,$params) { ... }

    Kedua, Validator dapat berupa nama kelas validator. Saat aturan diterapkan, instance kelas validator akandibuat untuk melakukan validasi sebenarnya. Opsi tambahan dalam aturan dipakai untuk menginisialisasi nilaiatribut instancenya. Kelas validator harus diperluas dari CValidator.

    Ketiga, Validator dapat berupa alias pradefinisi untuk kelas validator. Dalam contoh di atas, nama requiredadalah alias untuk CRequiredValidator yang memastikan nilai atribut yang divalidasi tidak kosong. Di bawah iniadalah daftar lengkap alias pradefinisi validator aliases:

    boolean: alias CBooleanValidator, memastikan atribut memiliki nilai baik berupaCBooleanValidator::trueValue ataupun CBooleanValidator::falseValue.captcha: alias CCaptchaValidator, memastikan atribut sama dengan kode verifikasi yang ditampilkan dalamCAPTCHA.

    compare: alias CCompareValidator, memastikan atribut sama dengan atribut atau konstan lain.email: alias CEmailValidator, memastikan atribut berupa alamat email yang benar.date: alias CDateValidator, memastikan atribut mewakili nilai tanggal, waktu atau tanggal waktu yang valid.default: alias CDefaultValueValidator, menempatkan nilai standar ke atribut yang ditetapkan.exist: alias CExistValidator, memastikan nilai atribut dapat ditemukan dalam kolom tabel.file: alias CFileValidator, memastikan atribu berisi nama file yang di-upload.

    Bekerja dengan Form: Membuat Model | The Definitive Guide to Yii | ... http://www.yiiframework.com/doc/guide/1.1/id/form.model

    2 of 6 27/02/2014 19:52

  • filter: alias CFilterValidator, mengubah atribut dengan filter.in: alias CRangeValidator, memastikan data ada diantara daftar nilai yang sudah ditetapkan.length: alias CStringValidator, memastikan panjang data di dalam jangkauan tertentu.match: alias CRegularExpressionValidator, memastikan data sesuai dengan ekspresi reguler.numerical: alias CNumberValidator, memastikan data adalah angka yang benar.required: alias CRequiredValidator, memastikan atribut tidak kosong.type: alias CTypeValidator, memastikan atribut adalah jenis data tertentu.unique: alias CUniqueValidator, memastikan data adalah unik dalam kolom tabel database.url: alias CUrlValidator, memastikan data berupa URL yang benar.

    Di bawah ini daftar beberapa contoh pemakaian validator pradefinisi:

    // username diperlukanarray('username', 'required'),// username harus antara 3 dan 12 karakterarray('username', 'length', 'min'=>3, 'max'=>12),// saat dalam skenario registrasi, password harus sama dengan password2array('password', 'compare', 'compareAttribute'=>'password2', 'on'=>'register'),// saat dalam skenario login, password harus diotentikasiarray('password', 'authenticate', 'on'=>'login'),

    3. Mengamankan Penempatan AtributSetelah instance model dibuat, seringkali kita perlu mempopulasikan atributnya dengan data yang dikirimkanoleh pengguna-akhir. Ini bisa dikerjakan dengan nyaman menggunakan massive assignment masal berikut:

    $model=new LoginForm;if(isset($_POST['LoginForm']))

    $model->attributes=$_POST['LoginForm'];

    Statement terakhir adalah massive assignment yang menempatkan setiap entri dalam $_POST['LoginForm']ke atribut model bersangkutan dalam skenario login. Ini sama dengan assignment berikut:

    foreach($_POST['LoginForm'] as $name=>$value){

    if($name is a safe attribute)$model->$name=$value;

    }

    Sangat krusial untuk menentukan apakah atribut safe (aman) atau tidak. Misalnya, mengekspos primary keysuatu tabel menjadi safe, maka penyerang memiliki kesempatan mengubah primary key dari record yangdiberikan dan sehingga memalsukan data yang seharusnya dia tidak memiliki hak untuk itu.

    Deklarasi Atribut SafeSebuah atribut dianggap aman jika muncul dalam rule validasi yang dapat diaplikasikan pada skenario yangdiberikan. Misalnya,

    array('username, password', 'required', 'on'=>'login, register'),array('email', 'required', 'on'=>'register'),

    Dalam contoh di atas, atribut username dan password diperlukan dalam skenario login sedangkan atributusername, password dan email diperlukan dalam skenario register. Sebagai hasilnya, jika kita melakukanpenempatan massal (massive assign) di dalam skenario login, hanya username dan password yang akanditempatkan secara massal karena hanya mereka yang muncul dalam aturan validasi untuk login. Di lain sisi,jika skenarionya adalah register, maka ketiga atribut dapat ditempatkan secara massal semuanya.

    // in login scenario$model=new User('login');if(isset($_POST['User']))

    $model->attributes=$_POST['User'];

    Bekerja dengan Form: Membuat Model | The Definitive Guide to Yii | ... http://www.yiiframework.com/doc/guide/1.1/id/form.model

    3 of 6 27/02/2014 19:52

  • // in register scenario$model=new User('register');if(isset($_POST['User']))

    $model->attributes=$_POST['User'];

    Jadi mengapa kita menggunakan kebijakan demikian untuk menentukan apakah sebuah atribut aman atautidak? Logika dibelakangnya adalah jika sebuah atribut sudah memiliki satu atau beberapa aturan validasi untukmengecek validasinya, apa yang harus kita khawatirkan lagi?

    Sangat penting untuk diingat bahwa aturan validasi digunakan untuk mengecek data inputan user alih-alih datayang dihasilkan kita di dalam kode (misalnya tanggal waktu, primary key yang di-generate otomatis). Olehkarenanya, JANGAN menambah aturan validasi untuk atribut yang tidak pernah diharapkan untuk diinput dariend-user.

    Kadangkala, kita ingin mendeklarasi sebuah atribut safe, walaupun kita tidak memiliki aturan spesifik padanya.Misalnya sebuah konten artikel yang bisa menerima inputan apapun dari user. Kita dapat menggunakan aturansafe khusus untuk mendapatkan tujuan ini :

    array('content', 'safe')

    Untuk lebih lengkap, terdapat aturan unsafe juga yang digunakan secara eksplisit untuk mendeklarasi sebuahatribut tidak aman.

    array('permission', 'unsafe')

    Peraturan unsafe jarang digunakan, dan merupakan perkecualian untuk definisi atribut safe sebelumnya.

    Untuk entri data yang tidak aman, kita perlu menempatkannya ke atribut bersangkutan menggunakan individualassignment statement, seperti berikut:

    $model->permission='admin';$model->id=1;

    4. Memicu ValidasiSetelah model dipopulasi dengan data yang dikirimkan pengguna, kita memanggil CModel::validate() untukmemicu proses validasi data. Metode mengembalikan nilai yang menunjukan apakah validasi sukses atau tidak.Untuk model CActiveRecord, validasi juga dapat dipicu secara otomatis saat kita memanggil metodeCActiveRecord::save().

    Kita dapat mengeset skenario dengan properti scenario dan dari situ mengindikasikan aturan validasi yang manayang harus diaplikasikan.

    Validasi dilakukan berdasarkan skenario. Properti scenario mentukan skenario model mana yang digunakan danaturan validasi mana yang Misalnya, untuk skenario login, kita hanya ingin memvalidasi input username danpassword pada user model; sedangkan pada skenario register, kita peru memvalidasi inputan yang lebihbanyak seperti email,address dan lain-lain. Contoh berikut menunjukkan bagaimana melakukan validasi padaskenario register:

    // creates a User model in register scenario. It is equivalent to:// $model=new User;// $model->scenario='register';$model=new User('register');

    // populates the input values into the model$model->attributes=$_POST['User'];

    // performs the validationif($model->validate()) // if the inputs are valid ...else ...

    Skenario yang dapat diaplikasikan pada aturan bersangkutan dapat dispesifikasikan dengan opsi on pada

    Bekerja dengan Form: Membuat Model | The Definitive Guide to Yii | ... http://www.yiiframework.com/doc/guide/1.1/id/form.model

    4 of 6 27/02/2014 19:52

  • Tinjauan Membuat Aksi

    aturan. Jika opsi on tidak diset, artinya aturan bersangkutan akan digunakan di seluturh skenario. Contohnya,

    public function rules(){

    return array(array('username, password', 'required'),array('password_repeat', 'required', 'on'=>'register'),array('password', 'compare', 'on'=>'register'),

    );}

    Aturan pertama akan diaplikasikan pada semua skenario, sedangkan dua aturan berikutnya diaplikasikan padaskenario register.

    5. Mengambil Kesalahan ValidasiBegitu validasi dilakukan, apabila terdapat kesalahan (error) akan disimpan dalam objek model. Kita bisamengambil pesan error dengan memanggil fungsi CModel::getErrors() dan CModel::getError(). Perbedaanantara kedua metode ini adalah yang pertama akan mengembalikan semua error untuk atribut modelbersangkutan sedangkan yang metode yang kedua akan mengembalikan error pertama.

    6. Label AtributKetika medesain sebuah form, seringkali kita perlu menampilkan label untuk setiap field input. Labelmemberitahu pengguna jenis informasi apa yang harus dimasukkan ke dalam field. Meskipun kita dapatmemberi label secara langsung dalam sebuah tampilan, akan lebih fleksibel dan nyaman jika kitamenetapkannya dalam model terkait.

    Secara default, CModel akan mengembalikan nama atribut sebagai labelnya. Ini dapat dikustomisasi denganmeng-override metode attributeLabels(). Seperti yang akan kita lihat dalam subbagian berikutnya, menetapkanlabel dalam model memungkinkan kita untuk membuat form lebih cepat dan powerful.

    $Id: form.model.txt 3482 2011-12-13 09:41:36Z mdomba $

    Be the first person to leave a commentPlease login to leave your comment.

    AboutAbout YiiFeaturesPerformanceLicenseContact Us

    DownloadsFrameworkExtensionsDemosLogo

    DocumentationTake the TourTutorialsClass ReferenceWikiScreencastsResources

    DevelopmentContribute to YiiLatest Updates

    CommunityForumLive Chat

    Yii Supporters

    The Ext4Yii Framework is a professional PHP Yii extension whichprovides server-side ExtJS functionality.

    Bekerja dengan Form: Membuat Model | The Definitive Guide to Yii | ... http://www.yiiframework.com/doc/guide/1.1/id/form.model

    5 of 6 27/02/2014 19:52

  • Report a BugReport a Security Issue

    NewsHall of FameBadges

    Terms of Service | License | Contact UsCopyright 2014 by Yii Software LLC. All Rights Reserved.

    Bekerja dengan Form: Membuat Model | The Definitive Guide to Yii | ... http://www.yiiframework.com/doc/guide/1.1/id/form.model

    6 of 6 27/02/2014 19:52