FuelPHP - Pemrograman Formulir Lanjutan

FuelPHP menyediakan pemrograman formulir lanjutan melalui kelas Fieldset dan Fieldset_Field. Fieldsetmenyediakan cara berorientasi objek untuk membuat formulir. Ini memiliki dukungan lengkap untuk model. Ini memiliki dukungan built-in untuk validasi sisi klien dan sisi server juga. Untuk membuat form full-fledged cukup dengan membuat model dengan form dan setting validasi yang tepat. Mari kita pelajari tentang kelas Fieldset dan cara membuat formulir menggunakannya di bab ini.

Fieldset

Fieldset adalah kumpulan dari Fieldset_Fieldbenda. Fieldset_Field mendefinisikan entri individu dari formulir seperti nama depan, nama belakang, dll bersama dengan validasi. Kelas fieldset memiliki metode untuk menambah / mengedit / menghapus bidang. Ini memiliki opsi untuk mengidentifikasi bidang yang ditentukan dalam model dan membuat bidang dari model yang diberikan.Fieldsetmenggunakan kelas Formulir dan Validasi di latar belakang untuk melakukan pekerjaan sebenarnya. Mari kita lihat beberapa metode penting dari kelas Fieldset.

menempa

forgemembuat instance Fieldset baru. Ini memiliki dua parameter berikut -

  • $name - pengenal untuk fieldset

  • $config- susunan konfigurasi. Opsi yang memungkinkan adalah validation_instance dan form_instance. validation_instance dapat memiliki objek Validasi dan form_instance dapat memiliki objek Formulir.

$employee_form = Fieldset::forge('employee');

contoh

instance mengembalikan instance Fieldset yang dibuat sebelumnya dengan pengenal.

$employee_form = Fieldset::instance('employee');

get_name

Mendapat pengenal dari instance fieldset.

$employee_form = Fieldset::forge('employee'); 
$name = $employee_form->get_name();

Menambahkan

addmembuat instance Fieldset_Field baru dan menambahkannya ke fieldset saat ini. Ini berisi empat parameter berikut,

  • $name - nama lapangan

  • $label - label untuk bidang tersebut

  • $attributes - Atribut tag HTML

  • $rules - aturan validasi

$employee_field = $employee_form-> add (
   'employee_lastname', 
   'Lastname', 
   array ('class' => 'pretty_input')
);  

// with validation rules 
$employee_form->add ( 
   'email', 'E-mail', 
   array('type' => 'email', 'class' => 'pretty_input'), 
   array('required', 'valid_email') 
);

add_before

add_before mirip dengan add, kecuali ia memiliki satu parameter ekstra untuk menentukan field sebelum field yang baru dibuat akan ditambahkan.

$employee_form->add_before (
   'employee_firstname', 
   'Firstname', 
   array ('class' => 'pretty_input'), 
   array(), 
   'employee_lastname'
);

menghapus

delete menghapus bidang tertentu dari fieldset.

$employee_form->delete('employee_firstname');

bidang

field mendapatkan semua bidang atau yang ditentukan dari fieldset.

$fields = $employee_form->field(); 
$lastname_field = $employee_form->field('employee_lastname');

membangun

buildadalah alias untuk $ this-> form () -> build () . Menghasilkan markup HTML dari formulir.

$employee_form->build(Uri::create('employee/add'));

memungkinkan

enable mengaktifkan kembali bidang yang sebelumnya telah dinonaktifkan.

$employee_form->enable('employee_firstname');

nonaktifkan

disable memungkinkan untuk menonaktifkan bidang di fieldset agar tidak dibangun.

$employee_form->disable('employee_firstname');

bentuk

form mengembalikan contoh Formulir dari fieldset saat ini.

$form = employee_form->form();

add_model

add_model menambahkan bidang model ke dalam fieldset. Ini memiliki tiga parameter berikut,

  • $class - nama kelas

  • $instance - contoh kelas untuk mengisi bidang dengan nilai

  • $method- nama metode di kelas. Metode ini digunakan untuk menambahkan field ke dalam fieldset. Orm \ Model memiliki metode yang diperlukan. Nama metode default adalah set_form_fields.

$employee_form = Fieldset::forge('employee'); 
$employee_form->add_model('Model_Employee');

mendiami

populate menetapkan nilai awal bidang di fieldset menggunakan contoh model.

$emp = new Model_Employee(); 
$emp->name = "Jon"; 
$employee_form->populate($emp);

mengisi kembali

repopulate sama dengan populate, kecuali itu mengisi kembali field di fieldset.

validasi

validation mendapatkan instance validasi dari fieldset saat ini.

$validation = $employee_form->validation();

divalidasi

Alias ​​untuk $ this-> validation () -> validated ().

input

Alias ​​untuk $ this-> validation () -> input ().

error

Alias ​​untuk $ this-> validation () -> error ().

show_errors

Alias ​​untuk $ this-> validation () -> show_errors ().

Contoh Kerja

Mari buat formulir lanjutan untuk menambahkan karyawan baru dalam aplikasi karyawan sampel kita menggunakan kelas Fieldset.

Perbarui Model

Perbarui model karyawan dengan aturan validasi yang diperlukan dan tambahkan pengamat validasi sebagai berikut.

<?php  
   class Model_Employee extends Orm\Model { 
      protected static $_connection = 'production'; 
      protected static $_table_name = 'employee'; 
      protected static $_primary_key = array('id'); 
      
      protected static $_properties = array ( 
         'id',  
         'name' => array ( 
            'data_type' => 'varchar',
            'label' => 'Employee Name', 
            'validation' => array ( 
               'required',  
               'min_length' => array(3),  
               'max_length' => array(80) 
            ), 
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
         'age' => array ( 
            'data_type' => 'int', 
            'label' => 'Employee Age', 
            'validation' => array ( 
               'required',  
            ), 
            'form' => array ('type' => 'text' ), 
         ), 
      );  
      
      // Just add the Observer, and define the required event 
      protected static $_observers = array('Orm\\Observer_Validation' => array ( 
         'events' => array('before_save'))); 
   }

Di sini, kami telah menetapkan aturan validasi untuk bidang nama dan usia dan menambahkan pengamat baru untuk melakukan validasi sisi server sebelum menyimpan model ke dalam database. Aturan validasi yang sama akan membuat atribut validasi input yang diperlukan juga dalam formulir.

Buat Formulir

Buat tindakan baru, action_advancedform di pengontrol karyawan sebagai berikut.

public function action_advancedform() { 
   
   // create a new fieldset and add employee model
   $fieldset = Fieldset::forge('employee')->add_model('Model_Employee');  
   
   // get form from fieldset 
   $form = $fieldset->form();  
   
   // add submit button to the form 
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));  
   
   // build the form  and set the current page as action  
   $formHtml = $fieldset->build(Uri::create('employee/advancedform'));  
   
   // set form in data 
   $data = array(); 
   $data['form'] = $formHtml;  
   return Response::forge(View::forge('employee/advancedform', $data, false)); 
}

Di sini, kami telah membuat formulir menggunakan fieldset dan mengirim formulir ke tampilan. Selanjutnya, tambahkan tampilan untuk tindakan tersebut,fuel/app/views/employee/advancedform.php sebagai berikut.

<!DOCTYPE html> 
<html lang = "en"> 
   
   <head> 
      <title>Employee :: add page</title> 
      <meta charset = "utf-8"> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1"> 
      <?php echo Asset::css('bootstrap.css'); ?> 
      
      <style>  
         table { 
            width: 90%; 
         }  
         table tr { 
            width: 90% 
         }
         table tr td { 
            width: 50% 
         }  
         input[type = text], select { 
            width: 100%; 
            padding: 12px 20px; 
            margin: 8px 0; 
            display: inline-block; 
            border: 1px solid #ccc; 
            border-radius: 4px; 
            box-sizing: border-box; 
         }  
         input[type = submit] { 
            width: 100%; 
            background-color: #3c3c3c; 
            color: white; 
            padding: 14px 20px; 
            margin: 8px 0; 
            border: none; 
            border-radius: 4px; 
            cursor: pointer; 
         }  
         div { 
            border-radius: 5px; 
            background-color: #f2f2f2; 
            padding: 20px; 
         } 
      </style> 
   </head> 
   
   <body> 
      <div class = "container"> 
         <?php
            if(isset($errors)) { 
               echo $errors; 
            } 
            echo $form; 
         ?> 
      </div> 
   </body> 
   
</html>

Sekarang, meminta halaman tersebut http://localhost:8080/employee/add akan muncul form berikut.

Formulir Proses

Perbarui metode tindakan, action_advancedform untuk memproses formulir dan menambahkan data karyawan yang dimasukkan oleh pengguna ke dalam database di pengontrol karyawan sebagai berikut.

public function action_advancedform() { 
   
   // create a new fieldset and add employee model 
   $fieldset = Fieldset::forge('employee')->add_model('Model_Employee');  
   
   // get form from fieldset 
   $form = $fieldset->form();  
   
   // add submit button to the form 
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit')); 
   
   // build the form  and set the current page as action  
   $formHtml = $fieldset->build(Uri::create('employee/advancedform'));  
   
   if (Input::param() != array()) { 
      try { 
         $article = Model_Employee::forge(); 
         $article->name = Input::param('name'); 
         $article->url = Input::param('age'); 
         $article->save(); 
         Response::redirect('employee/list'); 
      
      } 
      catch (Orm\ValidationFailed $e) { 
         $view = View::forge('employee/advancedform'); 
         $view->set('form', $formHtml, false); 
         $view->set('errors', $e->getMessage(), false); 
      } 
   } 
   
   return Response::forge($view); 
}

Di sini, kita telah diarahkan ke halaman daftar karyawan, setelah pengguna memasukkan data divalidasi dan disimpan ke dalam database. Jika tidak, formulir akan ditampilkan lagi.

Buat Formulir

Sekarang, minta URL, http://localhost:8080/employee/adddan memasukkan beberapa data karyawan dan mengirimkan formulir. Jika data tidak tersedia, maka form akan meminta pengguna untuk memasukkan data seperti yang ditunjukkan pada screenshot berikut.

Jika pengguna melewati validasi sisi klien, maka server akan memvalidasi formulir dan menampilkan kesalahan seperti yang ditunjukkan pada tangkapan layar berikut.

Jika data lolos validasi sisi klien dan server, maka data karyawan akan disimpan ke dalam database dan halaman dialihkan ke halaman daftar.