2.5表单
1.表单的创建
1.在Yii中主要是通过yii\widgets\ActiveForm类来创建表单(表单小部件)。
2.ActiveForm::begin()不仅标志着表单的开始,也同时创建了一个表单实例。
<?php $form=ActiveForm::begin();?> //$form是表单实例
<?= $form->field($model,'title')?>
...
<?php ActiveForm::end();?>
3.放在ActiveForm::begin()与ActiveForm::end()之间的所有内容都被包裹在HTML的<form>标签中。
4.中间是通过调用ActiveForm::field()方法来创建ActiveField实例,这个实例会创建表单元素与元素的标签,以及对应的JavaScript应证。
5.每个ActiveField都有对应的模型和属性,input输入框的name属性会自动地根据属性名创建;
同时还会用属性的验证规则来验证用户的数据输入。
图片截取自:魏曦教你学Yii2.0优酷视频.
2.ActiveField对象的使用
由第一节的知识点可以知道,对于表单如何使用的问题其实就是问:
ActiveField类如何使用的问题。
//举个例子
<?= $form->field($model,'body')->textarea(['rows'=>3]) =?>
//$form->field($model,'body')创建了一个ActiveField对象;
//ActiveField的方法textarea()创建了3行的输入框;
3.Html帮助类
在表单的开始和结束标签之间还有一些和模型对象没有关系的格外HTML标签,比如submitButton我们可以:
- 使用纯的Html标签
- 使用yii\helpers\Html帮助类中的方法来添加到表单中
图片截取自:魏曦教你学Yii2.0优酷视频.
4.块赋值
input标签中的name,实际是以对象来命名的一个数组,数组的健对应的是模型的属性。
<input type="text" id="contacnform-name" name="ContactForm[name]"/>
模型执行load方法,就是对每个属性都执行这样的一句赋值:
$model->name=isset($ContanctForm['name']) ? $ContanctForm['name'] : null;
所以这句话就可以理解了:
$model->load(Yii::$app->request->post())