表单的创建
- 在Yii中主要通过
yii\widgets\ActiveForm
类来创建表单 ActiveForm::begin()
不仅创建了一个表单实例,同时也标志着表单的开始- 放在
ActiveForm::begin()
和ActiveForm::end()
之间的所有内容都被包裹在html
的form
标签中 - 中间是通过调用
ActiveForm::field()
方法来创建一个ActiveForm
实例,这个实例会创建表单元素与元素的标签,以及对应的js
验证 ActiveField
有一个对应的模型和属性,input
输入框的name
属性会自动的根据属性名来创建,同时,还会用属性的验证规则来验证用户输入的数据
e.g.
1 | $form = ActiveForm::begin(); |
解析后的标签为:
1 | <form id="w0" action="/xx/xx/xx" method="post"> |
还会自动添加 js
验证,代码如下:
1 | jQuery('#contactform-name').yiiActiveForm([{ |
ActiveField 对象的使用
参考类参考手册
yii\widgets\ActiveField
中的方法
自定义表单action
链接和method
1 | 'action'=>['test/getpost'], 'method'=>'post',]); $form = ActiveForm::begin([ |
文本输入框
1 | 'password')->textInput(); = $form->field($model, |
限制输入长度
1 | 'username')->textInput(['maxlength'=>20]); = $form->field($model, |
关闭输入自动完成功能
1 | 'username')->textInput(['autocomplete'=>'off']); = $form->field($model, |
输入框只读
1 | 'username')->textInput(['readonly'=>true]); = $form->field($model, |
密码输入框
1 | 'password')->passwordInput(); = $form->field($model, |
单选框
1 | 'sex')->radioList(['1'=>'男', '0'=>'女']); = $form->field($model, |
复选框
1 | 'hobby')->checkboxList(['0'=>'篮球','1'=>'足球','2'=>'羽毛球','3'=>'乒乓球']); = $form->field($model, |
下拉框
1 | 'edu')->dropDownList(['1'=>'大学','2'=>'高中','3'=>'初中'], ['prompt'=>'请选择']); = $form->field($model, |
隐藏域
1 | 'userid')->hiddenInput(['value'=>3]); = $form->field($model, |
文本域
1 | 'info')->textarea(['rows'=>3]); = $form->field($model, |
文件上传
1 | 'file')->fileInput(); = $form->field($model, |
提示文字
1 | 'username')->textInput()->hint('Please enter your name'); = $form->field($model, |
设置文字样式
1 | 'username')->textInput()->hint('Please enter your name', ['style'=>'color:red;']); = $form->field($model, |
html5的邮箱输入框
1 | 'email')->input('email'); = $form->field($model, |
自定义输入框的显示标签名
1 | 'name')->label('姓名'); = $form->field($model, |
额外标签的处理,即与模型对象没有关系的额外 HTML 标签
e.g.
submit
,button
,p
等
使用 yii\helpers\Html
帮助类中的方法来添加到表单中
纯文本 :
1 | '<p class="username">'.$user->name.'</p>' = |
Html 帮助类
1 | 'p',Html::encode($user->name),['class'=>'username']) = Html::tag( |
提交按钮
1 | '提交', ['class'=>'btn btn-primary', 'name' =>'submit-button']); = Html::submitButton( |
重置按钮
1 | '重置', ['class'=>'btn btn-primary','name' =>'submit-button']); = Html::resetButton( |
块儿赋值
input
中的name
,实际是以对象名来命名的一个数组,数组的键对应模型的属性 (e.g.name="ContactForm[name]"
)model
执行load()
方法,就是对每个属性执行这样一句赋值:$model->name = isset($ContactForm['name']) ? $ContactForm[name] : null;
- 块赋值就是用这一句代码将用户所有的输入数据填充到模型中去
dropDownList 的高级用法
1 | 'status')->dropDownList($allStatus,['options' => [$needSelected => ['selected' => 'selected']],['prompt'=>'请选择状态']) = $form->field($model, |
$allStatus
是一个[1=>'已发布']
形式的关联数组$needSelected
为需要默认选中的值,其值满足$allStatus
中key
值中的一个