Lớp cơ sở của các phần tử trong Form
Các loại phần tử đưa vào form đều kế thừa từ Zend\Form\Element, như vậy các phần tử dù là loại cụ thể nào như Button, Text, ... có các phương thức chung đó là:
Method | Chi tiết |
---|---|
setName($name) | Thiết lập tên của phần tử. |
getName() | Lấy tên phần tử. |
setValue($value) | Thiết lập giá trị. |
getValue() | Lấy giá trị của phần tử. |
setLabel($label) | Thiết lập nhãn label cho phần tử. |
getLabel() | Lấy nhãn phần tử. |
setLabelAttributes($labelAttributes) | Thiết lập các thuộc tính cho nhãn lable, tham số là mảng các thuộc tính |
getLabelAttributes() | Lấy mảng thuộc tính Lable của phần tử. |
setLabelOptions($labelOptions) | Thiết lập các option cho Label |
getLabelOptions() | Mảng các option |
setOptions($options) | Thiết lập các option (tùy chọn cho phần tử). Các tùy chọn đó là label, label_attributes, label_options |
getOptions() | Lấy các option đã thiết lập cho phần tủ |
getOption($option) | Lấy một thiết lập cụ thể theo tên $option. |
setAttribute($key, $value) | Thiết lập một thuộc tính cho phần tử. |
getAttribute($key) | Lấy một thuộc tính. |
removeAttribute($key) | Xóa thuộc tính |
hasAttribute($key) | Kiểm tra thuộc tính có không |
setAttributes($arrayOrTraversable) | Thiết lập nhiều thuộc tính |
getAttributes() | Lấy tất cả các thuộc tính phần tử |
removeAttributes($keys) | Bỏ nhiều thuộc tính một lúc |
clearAttributes() | Xóa tất cả thuộc tính |
setMessages($messages) | Thiết lập danh sách thông báo (hiện thị khi lỗi không hợp lệ). |
getMessages() | Lấy dánh sách các thông báo. |
Trong đó các thuộc tính Attribute chính là các thuộc tính phần tử HTML tương ứng như thuộc tính: class, style, color .... Các option là các thiết lập riêng cho phần tử, hoạt động theo logic Zend Form sẽ trình bày dần ở từng phần tử.
Các tạo ra một phần tử của Form
Các phần tử trong FORM được tạo ra bằng cách khởi tạo trực tiếp từ hàm tạo và dùng các phương thức của phần tử để thiết lập, hoặc sử dụng factory
để khởi tạo (Zend\Form\ElementFactory
).
Sau khi tạo ra các phần tử, các phần tử có thể đưa vào Form bằng phương thức
$form->add($element)
Cách 1) Tạo ra trực tiếp bằng cách viết mã
Cách này tạo ra đối tượng phần tử, rồi dùng các hàm của phần tử thiết lập, sau đó add vào lớp Form: Ví dụ
$element = new Element('name'); $element->setLabel('Your name'); $element->setAttributes([ 'type' => 'text', ]); $form->add($element);
Cách 2) Tạo ra các phần tử từ add của Form
Mọi kiểu phần tử đều có thể tạo ra bằng cách dùng ElementFactory và chỉ ra một mảng khai báo thông số để tạo Element.
$form->add([ 'name' => 'username', 'type' => 'Text', 'options'=> ['label'=>'Nhập tên'], 'attributes' => ['class' => 'form-control', 'placeholder' => 'nhập tên']]);
Cách tạo này áp dụng phổ biến vì nhanh chóng tạo và thêm phần tử vào Form, cơ bản mang khai báo có thể có các thành phần như:
[ 'name' => 'name', 'type' => 'Text', 'attributes' => [ 'value' => 'Abc', 'class' => 'cssClass', 'id' => 'ID', ], 'options' => [ 'label' => 'Your name', ], ];
Trong đó type chỉ ra tên ngắn của phần tử như Text, Button ... (vì ZF đã định nghĩa Shortcut cho tên này) hoặc chỉ ra đường dẫn đần đủ đến lớp định nghĩa phần tử (ví dụ khi bạn tự xây dựng phần tử Form riêng) ví dụ:
'type' => Element\Phone::class
Các phần tử hay dùng
Button
$form = new \Zend\Form\Form(); $form->add( [ 'name' => 'name_element', 'type' => 'Button', 'options' => [ 'label' => 'Nút bấm', ], 'attributes' => [ 'value' =>'value', 'class' => 'form-control btn btn-danger'] ] );
Captcha
$form->add( [ 'type' => 'Zend\Form\Element\Captcha', 'name' => 'name_element', 'options' => [ 'label' => 'Kiểm tra bạn không phải là robot', 'captcha' => new \Zend\Captcha\Dumb(['label'=>'Nhập chính xác mã']), ], ] )
Checkbox
$ele = $form->add( [ 'type' => \Zend\Form\Element\Checkbox::class, 'name' => 'name_element', 'options' => [ 'label' => 'Một checkbox: ', 'use_hidden_element' => true, 'checked_value' => 'good', 'unchecked_value' => 'bad', ], ] );
Color
$form->add( [ 'type' => \Zend\Form\Element\Color::class, 'name' => 'name_element', 'options' => [ 'label' => 'Màu nền ? ',], ] );
Csrf
Phát sinh token để bảo mật Csrf
[ 'type' => \Zend\Form\Element\Csrf::class, 'name' => 'csrf', 'options' => [ 'csrf_options' => [ 'timeout' => 600, ], ], ]
Date
$form->add( [ 'type' => \Zend\Form\Element\Date::class, 'name' => 'name_element', 'options' => [ 'label' => 'Chọn ngày : ', 'format' => 'Y-m-d', ], 'attributes' => [ 'min' => '2012-01-01', 'max' => '2020-01-01', 'step' => '1', // days; default step interval is 1 day ], ] );
$form->add( [ 'type' => \Zend\Form\Element\Email::class, 'name' => 'name_element', 'options' => [ 'label' => 'Địa chỉ email: ', ], 'attributes' => [ 'multiple' => true, ], ] );
Hidden
$form->add( [ 'type' => \Zend\Form\Element\Hidden::class, 'name' => 'my-hidden', 'attributes' => [ 'value' => 'foo',], ] );
Number
$form->add( [ 'type' => \Zend\Form\Element\Number::class, 'name' => 'name_element', 'options' => [ 'label' => 'Số lượng: ', ], 'attributes' => [ 'min' => '0', 'max' => '10', 'step' => '1', // default step interval is 1 ], ] );
Password
$form->add( [ 'type' => \Zend\Form\Element\Password::class, 'name' => 'name_element', 'options' => [ 'label' => 'Mật khẩu: ', ], 'attributes' => [ ], ] );
Radio
$form->add( [ 'type' => \Zend\Form\Element\Radio::class, 'name' => 'name_element', 'options' => [ 'label' => 'Do you like chocolate?', 'value_options' => [ '0' => ' No ', '1' => ' Yes ', ], ], ] )
Select
$form->add( [ 'type' => \Zend\Form\Element\Select::class, 'name' => 'name_element', 'options' => [ 'label' => 'Tiếng mẹ đẻ của bạn ?', 'empty_option' => 'Chọn ngôn ngũ', 'value_options' => [ '0' => 'French', '1' => 'English', '2' => 'Japanese', '3' => 'Chinese', ], ], ] );
$form->add( [ 'type' => \Zend\Form\Element\Select::class, 'name' => 'name_element', 'options' => [ 'label' => 'Tiếng mẹ đẻ của bạn ?', 'empty_option' => 'Chọn ngôn ngũ', 'value_options' => [ 'european' => [ 'label' => 'European languages', 'options' => [ '0' => 'French', '1' => 'Italian', ], ], 'asian' => [ 'label' => 'Asian languages', 'options' => [ '2' => 'Japanese', '3' => 'Chinese', ], ], ] ], ] );
Text
$form->add( [ 'type' => \Zend\Form\Element\Text::class, 'name' => 'name_element', 'options' => [ 'label' => 'Tên của bạn ?', ], 'attributes' => [ 'placeholder' => 'nhập chính xác tên' ] ] );
Textarea
$form->add( [ 'type' => \Zend\Form\Element\Textarea::class, 'name' => 'name_element', 'options' => [ 'label' => 'Nội dung', 'label_attributes' => [ 'class' => 'w-100' ] ], 'attributes' => [ 'class' => 'w-100' ] ] );
Url
$form->add( [ 'type' => \Zend\Form\Element\Url::class, 'name' => 'name_element', 'options' => [ 'label' => 'Webpage URL: ', ], ] );