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.