Dengan menggunakan widget form. Form tersebut dapat di pakai berulang-ulang di banyak modul atau Widget Form tersebut dapat di panggil didalam Widget Form yang lain.
Dengan konsep Widget Form ini, form cukup dituliskan sekali kemudian dipakai berulang-ulang. Dibawah ini adalah gambar dari eksperimen form yang akan dibuat
Form sebelum di tekan tombol simpan
Form setelah ditekan tombol simpan dan menampilkan pesan validasi form
klik gambar untuk lebih jelas
klik gambar untuk lebih jelas
Secara ilustrasi mekanisme dari Widget Form seperti dibawah ini
Tahapan nya sebagai berikut
1. Buatlah sebuah file di folder lib/form dari projek symfony seperti gambar dibawah ini:
2. Beri nama file tersebut dengan format nama widget yang diakhirin Form.class.php sebagai contoh adalah ModulPertamaAddForm.class.php seperti gambar dibawah ini:
3. Buatlah sebuah class pada file ModulPertamaAddForm.class.php dengan nama sama dengan nama file, seperti contoh dibawah ini:
//membuat class bernama ModulPertamaAddForm class ModulPertamaAddForm extends sfForm { //metod wajib dalam untuk membuat widget public function configure() { //membuat elemen dengan text input yang bernama nama_lengkap $this->setWidget('nama_lengkap', new sfWidgetFormInputText()); //membuat elemen text area yang bernama alamat $this->setWidget('alamat', new sfWidgetFormTextArea()); //membuat varibel pengikat yang benernama modulPertamaAdd $this->widgetSchema->setNameFormat('modulPertamaAdd[%s]'); //membuat validasi minimun inputan sebanyak tiga karakter dan wajib diisi untuk elemen yang bernama nama_lengkap $this->setValidator('nama_lengkap', new sfValidatorString(array( 'min_length' => '3', 'required' => true, 'trim' => true ))); //membuat validasi minimun inputan sebanyak lima karakter dan wajib diisi untuk elemen yang bernama alamat $this->setValidator('alamat', new sfValidatorString(array( 'min_length' => '5', 'required' => true, 'trim' => true ))); } }
4. Panggilah widget tersebut pada modul yang membutuhkannya, sebagai contoh widget akan di panggil pada modul yang bernama modulPertama
Kemudian pada file action modulPertama yaitu actions.class.php panggil widget ModulPertamaAddForm seperti contoh dibawah ini:
//membuat action dengan nama Add public function executeAdd(sfWebRequest $request) { //memanggil widget ModulPertamaAddForm $this->form = new ModulPertamaAddForm(); //jika dideteksi ada pengiriman dari form if ($request->isMethod('post')) { //ambil variabel pengikat yang telah didefiniskan di widget ModulPertamaAddForm $this->form->bind($request->getParameter('modulPertamaAdd')); //jika semua input valid/benar if($this->form->isValid()) { //untuk meletakan kode eksekusi } } }
5. pada template dari modul yang memanggil yaitu modulPertama dengan nama template AddSuccess.php seperti gambar dibawah ini
Tambahkan kode untuk menampilkan form seperti dibawah ini:
<?php //membuat form dengan modul yang dituju adalah modulPertama dengan action yang dituju bernama add ?> <?php echo form_tag('modulPertama/add',array( "method"=>"POST", "enctype"=>"multipart/form-data")) ?> <?php //menampilkan elemen nama_lengkap dari widget ModulPertamaAddForm ?> <?php echo $form['nama_lengkap']->render(array('style'=>'background-color:#ADD8E6; height:25px')) ?> <?php //menampilkan pesan error elemen nama_lengkap dari hasil validasi widget ModulPertamaAddForm ?> <?php echo $form['nama_lengkap']->renderError() ?> <?php //menampilkan elemen alamat dari widget ModulPertamaAddForm ?> <?php echo $form['alamat']->render(array('style'=>'background-color:#ADD8E6; height:100px')) ?> <?php //menampilkan pesan error elemen nama_lengkap dari hasil validasi widget ModulPertamaAddForm ?> <?php echo $form['alamat']->renderError() ?> <input type="submit" value="Simpan" /> <?php echo button_to('Batal','modulPertama/index') ?> <?php //untuk mencegah serangan csrf ?> <?php echo $form['_csrf_token']->render() ?> </form>Referensi :
List Class Validasi - klik link
List Widget - klik link
Cara Membuat Form 1 - klik link
Cara Membuat Form 2 - klik link
Cara Membuat Form 3 - klik link
Cara Membuat Form 4 - klik link
bro mau nanya dong..
ReplyDeletekalo misal :
class ModulKeduaAddForm extends ModulPertamaAddForm
public function configure() {
parent :: configure();
unset(
$this['alamat']);
$this->widgetSchema['nama_pacar']->setLabel('Nama Pacar');
}
}
Kalo mau nampilin ke formnya gmn ya bro?
tolong pertuahnya dong bos..
thx
ga jadi bro..
ReplyDeleteproblem solved hehehehe
syukurlah klw begitu..
ReplyDeletekalau mau bikin login mas gimana yah saya gak bisa masuk wae pas loginnya saya pake plugin sfGuardPlugin mas tolong bantuannya
ReplyDeletesaya belum pernah pake sfGuardPlugin..
ReplyDeleteuntuk bikin login saya bikin sendiri, seperti yang ada di http://www.symfony-project.org/askeet/1_0/en/6
bro klo buat form nya gk dari lib gmana?jadi buat di template
ReplyDeleteklw menggunakan symfony versi 1.3 dan 1.4 model form nya seperti di jelaskan pada posting ini. Apabila ingin form nya langsung di pasang di template dapat menggunakan symfony versi 1.0, 1.1 dan 1.2 seperti yang dijelasakan di sini -> http://www.symfony-project.org/book/1_2/10-Forms
ReplyDeletegimana cara buat registrasi form dengan symfony dengan plugin sfDoctrineGuardPlugin? tolong bantuannya ya.
ReplyDeleteSaya ngak pernah pakai sfDoctrineGuardPlugin, saya biasa nya bikin sendiri untuk proses login.
Delete