Fieldset
Fieldset là một tập hợp các đối tượng Fieldset_Field . Fieldset_Field xác định mục nhập riêng lẻ của một biểu mẫu như firstname, lastname, vv cùng với các xác nhận hợp lệ. Fieldset class có các phương thức để thêm / sửa / xóa các trường. Nó có các tùy chọn để xác định các trường được xác định trong một mô hình và tạo ra các trường từ mô hình đã cho. Fieldset sử dụng các lớp Form và Validation trong nền để thực hiện công việc thực. Chúng ta hãy xem một số phương pháp quan trọng của lớp Fieldset.làm giả
forge tạo một thể hiện Fieldset mới. Nó có hai tham số sau đây$ name - định danh cho fieldset
Mảng cấu hình $ config . Các tùy chọn có thể là validation_instancevà form_instance. validation_instance có thể có đối tượng Validationvà form_instance có thể có đối tượng Form.
$employee_form = Fieldset::forge('employee');
ví dụ
Ví dụ trả về cá thể Fieldset đã được tạo trước đó bằng mã định danh.$employee_form = Fieldset::instance('employee');
get_name
Nhận định danh của thể hiện fieldset.$employee_form = Fieldset::forge('employee'); $name = $employee_form->get_name();
thêm vào
add tạo một thể hiện Fieldset_Field mới và thêm nó vào fieldset hiện tại. Nó chứa bốn thông số sau,$ name - tên của trường
$ label - nhãn cho trường
$ attribute - Thuộc tính thẻ HTML
$ quy tắc - quy tắc xác thực
$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') );
Thêm trước
add_before tương tự như add, ngoại trừ nó có thêm một tham số để xác định trường trước khi trường mới được tạo sẽ được thêm vào.$employee_form->add_before ( 'employee_firstname', 'Firstname', array ('class' => 'pretty_input'), array(), 'employee_lastname' );
xóa bỏ
xóa xóa trường đã chỉ định khỏi fieldset.$employee_form->delete('employee_firstname');
cánh đồng
trường nhận được tất cả các trường hoặc trường được chỉ định từ fieldset.$fields = $employee_form->field(); $lastname_field = $employee_form->field('employee_lastname');
xây dựng
build là bí danh cho $ this-> form () -> build () . Tạo đánh dấu HTML của biểu mẫu.$employee_form->build(Uri::create('employee/add'));
cho phép
bật lại cho phép trường đã bị vô hiệu hóa trước đó.$employee_form->enable('employee_firstname');
vô hiệu hóa
vô hiệu hóa cho phép vô hiệu hóa một trường trong fieldset đang được xây dựng.$employee_form->disable('employee_firstname');
hình thức
form trả về cá thể Form của fieldset hiện tại.$form = employee_form->form();
add_model
add_model thêm trường của mô hình vào fieldset. Nó có ba thông số sau,$ class - tên lớp
$ instance - instance của lớp để điền vào các trường có giá trị
$ method - tên của phương thức trong lớp. Phương thức này được sử dụng để thêm các trường vào fieldset. Orm \ Model có phương thức cần thiết. Tên phương thức mặc định là set_form_fields.
$employee_form = Fieldset::forge('employee'); $employee_form->add_model('Model_Employee');
cư trú
điền tập hợp giá trị ban đầu của các trường trong fieldset sử dụng cá thể mô hình.$emp = new Model_Employee(); $emp->name = "Jon"; $employee_form->populate($emp);
phục hồi
repopulate giống như điền, ngoại trừ nó repopulates các lĩnh vực trong fieldset.xác thực
xác nhận hợp lệ nhận được cá thể xác thực của fieldset hiện tại.$validation = $employee_form->validation();
đã xác thực
Bí danh cho $ this-> validation () -> validated ().đầu vào
Bí danh cho $ this-> validation () -> input ().lỗi
Bí danh cho $ this-> validation () -> error ().show_errors
Bí danh cho $ this-> validation () -> show_errors ().Ví dụ làm việc
Hãy tạo một biểu mẫu nâng cao để thêm nhân viên mới vào ứng dụng nhân viên mẫu của chúng ta bằng cách sử dụng lớp Fieldset.Cập nhật mô hình
Cập nhật mô hình nhân viên với các quy tắc xác nhận cần thiết và thêm một người quan sát xác nhận như sau.<?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'))); }
Ở đây, chúng tôi đã xác định các quy tắc xác nhận cho các trường tên và tuổi và thêm một người quan sát mới để thực hiện xác thực phía máy chủ trước khi lưu mô hình vào cơ sở dữ liệu. Quy tắc xác thực tương tự sẽ tạo các thuộc tính xác thực đầu vào cần thiết cũng như trong biểu mẫu.
Tạo biểu mẫu
Tạo hành động mới, action_advancedform trong bộ điều khiển nhân viên như sau.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)); }Ở đây, chúng ta đã tạo biểu mẫu bằng cách sử dụng fieldset và gửi biểu mẫu tới khung nhìn. Tiếp theo, thêm chế độ xem cho hành động, nhiên liệu / ứng dụng / lượt xem / nhân viên / advancedform.php như sau.
<!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>Bây giờ, yêu cầu trang http: // localhost: 8080 / employee / add sẽ hiển thị biểu mẫu sau.
![]() |
| ảnh minh họa |
Biểu mẫu quy trình
Cập nhật phương thức hành động, action_advancedform để xử lý biểu mẫu và thêm dữ liệu nhân viên do người dùng nhập vào cơ sở dữ liệu trong trình điều khiển nhân viên như sau.
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); }Ở đây, chúng tôi đã được chuyển hướng đến trang danh sách nhân viên, khi người dùng nhập dữ liệu được xác thực và lưu vào cơ sở dữ liệu. Nếu không, chúng tôi sẽ hiển thị lại biểu mẫu.
Tạo biểu mẫu
Bây giờ, yêu cầu URL, http: // localhost: 8080 / employee / add và nhập một số dữ liệu nhân viên và gửi biểu mẫu. Nếu dữ liệu không được cung cấp, thì biểu mẫu sẽ nhắc người dùng nhập dữ liệu như được hiển thị trong ảnh chụp màn hình sau đây.![]() |
| ảnh minh họa |
Nếu người dùng bỏ qua xác thực phía máy khách, thì máy chủ sẽ xác thực biểu mẫu và hiển thị lỗi như được hiển thị trong ảnh chụp màn hình sau đây.
![]() |
| ảnh minh họa |
Nếu dữ liệu được thông qua xác thực phía máy khách và phía máy chủ, thì dữ liệu nhân viên sẽ được lưu vào cơ sở dữ liệu và trang được chuyển hướng đến trang danh sách.





