You are on page 1of 6

Tạo Form trong Yii2 Framework bằng ActiveForm

ActiveForm là một widget được xây dựng như một mô hình tương tác trực tiếp với một hoặc nhiều
mô hình dữ liệu.

ActiveForm là một widget được xây dựng như một mô hình tương tác trực tiếp với một hoặc nhiều
mô hình dữ liệu.

Các class ActiveForm kế thừa

yii\widgets\ActiveForm » yii\base\Widget » yii\base\Component » yii\base\Object

Để sử dụng ActiveForm ta cần khai báo các thư viện của nó

<?php

use yii\helpers\Html;

use yii\widgets\ActiveForm;

?>

Bắt đầu và kết thúc ActiveForm 


<?php

use yii\helpers\Html;

use yii\widgets\ActiveForm;

$form = ActiveForm::begin([

'id' => 'active-form', // Khai báo id của form

'options' => [ // Khai báo các thuộc tính của thẻ HTML. Như class, id, enctype...

'class' => 'form-horizontal',

'enctype' => 'multipart/form-data'

],

])

/* Các trường dữ liệu của ActiveForm */

ActiveForm::end();

?>
Các trường dữ liệu của ActiveForm
Các trường dữ liệu của ActiveForm được tạo bởi phương thức field(), trong đó truyền vào các giá trị
là model và tên thuộc tính của model đó.

I. Text Input

<?= $form->field($model, 'product_name')->textInput(['maxlength' => 30])->hint('Nhập


tên sản phẩm')->label('Tên sản phẩm') ?>

Ở trên là đoạn code khai báo một text input đi kèm với thuộc tính hint và label. Nếu bỏ đi thì Yii sẽ
mặc định không có hint và label sẽ lấy theo model. Ngoài ra nếu không muốn hiển thị label ta có thể
set label là false.
Bên trong textInput() ta có thể khai báo các thuộc tính như class, id, maxlength...
Ngoài ra ta có thể bỏ textInput() nếu không cần khai báo thêm thuộc tính khác.

<?= $form->field($model, 'product_name') ?>

II. TextArea

<?= $form->field($model, 'description')->textArea([('rows'=>5,'cols'=>10]) ?>

Cũng giống như text input, textarea cũng có các thuộc tính đi kèm như hint và label. 
Bên trong textArea() ta có thể khai báo các thuộc tính như class, id, rows, cols...
Khi khai báo field text area không thể bỏ textArea().
(những trường khác cũng tương tự)

III. Password Input

Có 2 cách khai báo 

// Cách 1

<?= $form->field($model, 'password')->input('password') ?>

// Cách 2
<?= $form->field($model, 'password')->passwordInput() ?>

Các thuộc tính của nó tương tự text input

IV. File Upload

Để sử dụng được file input thì lúc bắt đầu ActiveForm ta phải khai báo thuộc tính
 'enctype' => 'multipart/form-data'  

// Upload 1 file

<?= $form->field($model, 'uploadFile')->fileInput() ?>

// Upload nhiều file

<?php echo $form->field($model, 'uploadFile[]')->fileInput(['multiple'=>'multiple']);


?>

V. Checkbox Button Field

// Checkbox với label mặc định

<?= $form->field($model, 'status')->checkbox(); ?>

// Thiết lập thuộc tính của checkbox

<?= $form->field($model, 'status')->checkbox([

'label' => 'Label Checkbox Status', //label của ô checkbox

'labelOptions'=>[

'style'=>'padding:5px;'

], // thiết lập option cho label

'disabled'=>true, // khi thiết lập là true sẽ không thể check

])->label('Label của Field'); ?>


VI. Checkbox List Input

Checkbox List dùng khi có một trường có thể chọn nhiều giá trị. 

<?php echo $form->field($model, 'type[]')->checkboxList(['a' => 'Type A', 'b' =>


'Type B', 'c' => 'Type C']); ?>

Các thuộc bên trong tương tự Checkbox Button.

VII. Radio Button Field

// Radio với label mặc định

<?= $form->field($model, 'gender')->radio(); ?>

// Thiết lập thuộc tính của checkbox

<?= $form->field($model, 'gender')->radio([

'label' => 'Gay', //label của ô radio

'labelOptions'=>[

'style'=>'padding:5px;'

], // thiết lập option cho label

])->label('Giới tính'); ?>

VIII. Radio Button List Field

<?php echo $form->field($model, 'type[]')->radioList(['a' => 'Type A', 'b' => 'Type
B', 'c' => 'Type C']); ?>

IX. ListBox Field
// Listbox với prompt text

<?= $form->field($model, 'number')->listBox(

[1=>'1',2=>'2',3=>'3',4=>'4',5=>'5'],

['prompt'=>'Chọn']

); ?>

// Listbox với size

<?= $form->field($model, 'number')->listBox(

[1=>'1',2=>'2',3=>'3',4=>'4',5=>'5'],

['prompt'=>'Select','size'=>3]

); ?>

// Listbox với các thuộc tính khác

<?= $form->field($model, 'number')->listBox(

[1=>'1',2=>'2',3=>'3',4=>'4',5=>'5'],

['disabled' => true,'style'=>'background:gray;color:#fff;'])

->label('Chọn số'); ?>

X. DropDown List 

//Dropdown List truyền vào mảng các item và option của dropdown

<?=echo $form->field($model, 'type')->dropDownList(['a' => 'Type A', 'b' => 'Type B',
'c' => 'Type C'],['prompt'=>'Chọn']); ?>

Để truyền các item từ model vào dropDown ta làm như sau 

<?php

// dùng model lấy tất cả giá trị type

$types = app\models\Type::find()->all();

// Dùng ArrayHelper để lấy về một mảng với key là 'code' và value là 'name'
$listData = yii\helpers\ArrayHelper::map($types,'code','name');

// truyền array $listData vào dropDownList

echo $form->field($model, 'type')->dropDownList($listData,['prompt'=>'Chọn']);

?>

XI. Button

//Button thường

<?= Html::Button('Button', ['class'=> 'btn btn-primary']) ;?>

//Button submit

<?= Html::submitButton('Submit', ['class'=> 'btn btn-primary']) ;?>

// Button reset

<?= Html::resetButton('Reset', ['class'=> 'btn btn-primary']) ;?>

Ngoài ra còn nhiều phương thức khác của ActiveForm bạn có thể tìm hiểu qua link:
http://www.yiiframework.com/doc-2.0/yii-widgets-activeform.html

* Nếu có bất cứ thắc mắc hoặc đóng góp cho bài viết được hoàn thiện hơn thì hãy để lại bình luận phía
dưới nhé!

You might also like