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在提交一遍,重复入库!这个坑把我坑惨了,希望大家不要步我后尘呀!