yii2 ActiveForm 小总结


控制器中很简单
public function actionIndex()
{
    $model = new Goods;
    return $this->render('index', ['model'=>$model]);
}
模型(models)中
// 引入ActiveRecord 并继承  当然这个表单没半毛钱关系,但你控制器得实例化数据表吧,推荐使用ActiveRecord
use yii\db\ActiveRecord;  
use Yii;

class Goods extends ActiveRecord
{
    public static function tableName()
    {
        return "goods";
    }
}

上面属于废话,略过...

视图(view)中,才是重点

首先引入ActiveForm和Html这里两个是很重要的

<?php
use yii\bootstrap\ActiveForm;
use yii\helpers\Html;
?>

文本框:textInput(); 密码框:passwordInput();单选框:radio(),radioList();
复选框:checkbox(),checkboxList(); 下拉框:dropDownList();隐藏域:hiddenInput();
文本域:textarea(['rows'=>3]); 文件上传:fileInput();提交按钮:submitButton();
重置按钮:resetButtun();

<?php $form = ActiveForm::begin([
        'method' => 'post',  // 传值类型
        'action' => \yii\helpers\Url::to(['user/index']), // 默认不写,提交到当前控制器方法,但也可以这么设置
        'options' => [  // 设置form的样式
            'enctype' => 'multipart/form-data',  // 上传文件设置 注意:与post方法配套使用
            'class' => 'form-horizontal',    // 设置form的class
        ],
        'fieldConfig' => [  // 为每一个input 设置
            'template' => "{label}\n<div class=\"col-lg-5\">{input}</div>\n<div class=\"col-lg-5\">{error}</div>", 
            'labelOptions' => ['class' => 'col-lg-2 control-label'],    // 设置label 的属性 添加class
        ],
    ]); ?>

    <?= $form->field($model, 'username')->textInput([
        'maxlength' => 20,  // 最多输入20个字符
        'minlength' => 6, // 最少输入6个字符
        'placeholder' => '提示',
    ]) ?>

    <?= $form->field($model, 'password')->passwordInput(['maxlength' => 20]) ?>

    <?= $form->field($model, 'sex')->radioList(['1' => '男', '0' => '女']) ?>

    <?= $form->field($model, 'edu')->dropDownList(['1' => '大学', '2' => '高中', '3' => '初中'], ['prompt' => '请选择', 'style' => 'width:120px']) ?>

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

    <?= $form->field($model, 'hobby')->checkboxList(['0' => '篮球', '1' => '足球', '2' => '羽毛球', '3' => '乒乓球']) ?>

    <?= $form->field($model, 'hobby')->checkbox() ?> // 单复选框,值1/0

    <?= $form->field($model, 'info', [
        // 可以自定义,并会覆盖掉form中设置的属性
        'template' => '<div class="form-group">{label}<div class="col-lg-6">{input}</div>{error}</div>',
        'labelOptions' => ['class' => 'col-lg-2 control-label'],
    ])->textarea([
        'rows' => 4,    // 可输入多少行
        'placeholder' => '提示'
    ]) ?>

    <?= $form->field($model, 'userid')->hiddenInput(['value' => 3]) ?>

    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
        <?= Html::resetButton('重置', ['class' => 'btn btn-info']) ?>
    </div>
小知识
$model->isNewRecord?'创建':'修改'; // 可以用来判断是否是修改还是创建
关于 dropDownList 和 checkboxList 的使用
直接循环遍历
    // 控制器中
    use yii\helpers\ArrayHelper;
    //方法中
    $grade = Groud::find()->all(); // 查询出想遍历的东东
    $listData = ArrayHelper::map($grade, 'id', 'name'); // 出来的就是这个样子的['1' => '大学', '2' => '高中', '3' => '初中']
    // 视图中
    <?= $form->field($model, 'sex')->radioList($listData) ?>

    <?= $form->field($model, 'edu')->dropDownList($listData, ['prompt' => '请选择', 'style' => 'width:120px']) ?>
设置checkboxList中每个checkbox的样式

这边可以使用两个itemOptions和item

itemOptions :生成每个checkbox的参数选项.

// 我这边是用html生成的,不要问我怎么用ActiveForm生成
<?= Html::checkboxList('children', [], $permissions, ['class' => 'col-lg-5','itemOptions'=>array('style'=>'margin:10px')]); ?>

item : 在生成每个checkbox表单的时候,都会回调这个函数,如果设置了则使用返回值作为checkbox的表单,否则使用static::checkbox函数来生成每个checkbox表单,函数格式为: function ($index, $label, $name, $checked, $value)

<?= Html::checkboxList('children', [], $permissions, ['class' => 'col-lg-5', 
                            'item' => function ($index, $label, $name, $checked, $value) {
                            $checkStr = $checked ? "checked" : "";
                            return '<label><input type="checkbox" style="margin:10px" name="' . $name . '" value="' . $value . '" ' . $checkStr . ' class="class' . $index . '" data-uid="user' . $index . '">' . $label . '</label>';
                        }]); ?>

关于做登陆的时候,账号和密码老是被自动填充问题
1)怎么关闭呢
添加html5 属性  : autocomplete = 'off'
但是问题又来了,autocomplete这个属性有毒,时灵时不灵,我是深受折磨,怎么办呢
有个解决方法 把off 换成随意的字符 比如 qunzhu,
这边解释下之所以输qunzhu也能解决off失效的原因是autocomplete的属性有效值只有off和on,默认是on,但如果autocomplete的属性值是除on和off之外的值,那就是个无效值,浏览器就会放弃对该属性的执行,所以除了on和off外,可以随意编.






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值