yii2的Activeform表单是一个很好用的控件,其实他的扩展性也很强,但是你得对它有充分的了解后,才能灵活的运用,现把工作中对于Activeform的使用,做一下小结:
一、各种形式的输入框,下拉框等
隐藏域:
<?php use yii\helpers\Html; ?> <?= Html::activeHiddenInput($model,'id') ?> //隐藏域 <?= Html::activeHiddenInput($model,'type',array('value'=>1)) ?> //带默认值的隐藏域
输入框:
<?= $form->field($model, 'name')->textInput()->label('名称:')->hint('请输入名称') ?> //带上下箭头加减的数字类型 <?= $form->field($model, 'sort')->textInput(['type'=>'number'])->label('排序:') ?>
下拉框:
//$dept为一个id为键,name为值的数组 实例方法如下: public function getdropDownList($where=[]){ $lists = $this->getFrontList($where); $list = array(); foreach ($lists as $k=>$v){ $list[$v->id]=$v->username; } return $list; } 将$list传到页面即可! <?= $form->field($model, 'departmentid')->dropDownList($dept,['prompt'=>'请选择'])->label('部门:') ?>
单选框:
<?= $form->field($model, 'sex')->radioList(['1'=>'男','0'=>'女']) ?>
复选框:
<?= $form->field($model, 'hobby')->checkboxList(['0'=>'篮球','1'=>'足球','2'=>'羽毛球','3'=>'乒乓球']) ?>
文本域:
<?= $form->field($model, 'info')->textarea(['rows'=>3]) ?>
文件上传:
<?= $form->field($model, 'file')->fileInput() ?>
密码框:
<?= $form->field($model,'password')->passwordInput()->label('登陆密码',['class'=>'col-sm-2 control-label']) ?> <?= $form->field($model,'passwordRepeat')->passwordInput()->label('确认密码',['class'=>'col-sm-2 control-label']) ?>
重置和提交:
<?= Html::submitButton('提交', ['class'=>'btn btn-primary','name' =>'submit-button']) ?> <?= Html::resetButton('重置', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>
widget使用:
?= $form->field($model, 'image')->widget(FileInput::className(), [ 'options' => ['accept' => 'image/*'], 'pluginOptions' => [ 'showUpload' => false, 'showCaption' => true, 'browseLabel' => '选择图片', 'removeLabel' => '删除', 'initialPreview' => Html::img(Url::toDefaultImg(),['class' => 'file-preview-image']) ], ]) ?>
表单提交开始和结束:
<?php $form = ActiveForm::begin([ 'action'=>"",//可以自定义,不填则遵循从哪来到哪去的规则 'options' => ['id'=>'form','class' => 'wizard-big','enctype' => 'multipart/form-data'], 'fieldConfig'=>[ 'template'=> "{label}\n<div class=\"col-sm-10\">{input}\n{error}\n{hint}</div>", 'labelOptions'=>['class'=>'col-sm-2 control-label'], ] ]) ?> .... <div class="modal-footer"> <?=Html::submitButton('保存',['class'=>'btn btn-primary'])?> </div> <?php ActiveForm::end() ?> //这地方有几个坑,如果出现前端不能进行输入验证时,可能的原因如下: a.‘option’=>['id'=>'form'],跟验证名称对应不起来,导致验证失败 b.检查<?php ActiveForm::end() ?>是否存在,只有开始,没有结束时,h5会默认自动补全,不会报错 3.检查程序中的验证规则
注意:如果使用的ajax提交时,注意检查自己写的提交安装是否给了type='button'类型,如果不给,h5会默认为submit提交,导致ajax提交一遍,submit在提交一遍,重复入库!这个坑把我坑惨了,希望大家不要步我后尘呀!