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ã']),
        ],
    ]
)
Kiểm tra bạn không phải là robotNhập chính xác mã upeni6os

 

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
        ],
    ]
);

 

Email

$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 ',
            ],
        ],
    ]
)
Do you like chocolate?

 

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: ',
        ],
    ]
);

 


Đăng ký nhận bài viết mới