博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yii2中表单的几种写法
阅读量:6039 次
发布时间:2019-06-20

本文共 3379 字,大约阅读时间需要 11 分钟。

与Model关联的ActiveForm表单

yii2中常规的表单,基于\yii\bootstrap\ActiveForm创建的表单类,需要一个继承自yii\base\Model的ModelForm类,比如有一个保证金初始化表单,可能需要一个保证表单类(DepositInitForm):

model

namespace backend\models;use Yii;use yii\base\Model;/** * Login form * 保证金初始化 */class DepositInitForm extends Model{    public $type;    public $id;    public $uid;    /**     * @inheritdoc     */    public function rules()    {        return [            [['type', 'id', 'uid'], 'safe'],            [['id'], 'required'],        ];    }}

在初始化表单的view视图中,我们需要创建关联的表单。关联表单的几个好处:

  • 表单的验证

  • 表单在修改的时候自动填充

  • 减少代码量

  • bootstrap提供的自适应特性

view

在init.php视图中我们可以这样创建表单:

'deposit-init-form', 'layout' => 'inline', 'method' => 'post', 'action' => Url::to('deposit/init')]); echo $form->field($model, 'type')->dropDownList(['0' => '选择拍卖类型', '1' => '拍场', '2' => '拍品']); echo $form->field($model, 'id')->textarea(['placeholder' => '请输入拍场id或者拍品id']); // 此处用了hidden表单,以后扩展根据用户uid查询 echo $form->field($model, 'uid')->textarea(['placeholder' => '请输入添加白名单用户id,多个用逗号分隔']); echo Html::button('初始化', ['class' => 'btn btn-danger init']); echo Html::button('查询', ['class' => 'btn btn-default query']) ?> ActiveForm::end();?>

controller

在DespositController控制器中可以这样写:

/** * 白名单,保证金 */public function actionInit(){    $model = new \backend\models\DepositInitForm;    $model->type = 1; // 下拉列表默认选中设置    if ($model->load(Yii::$app->request->post()) && $model->validate()) {        // TODO 处理业务逻辑        ...    }    return $this->render('init',['model' => $model]);}

基于Html帮助类创建表单

有时候,我们并不想关联一个model,比如我们需要调用rest服务的时候,我们只是想把表单的数据提交到一个url请求去,此时,我们可以选择\yii\helpers\Html帮助类,创建一个简单的表单:

view

'page-conversion-form', 'class' => 'form-inline', 'role' => 'form']); ?>
'所有订单', '1' => '普通订单', '2' => '拍卖订单'], ['class' => 'form-control']); ?>
'btn btn-default']);echo Html::endForm();// ...?>

这里写了一个简单的根据订单类型统计转化率的表单,该表单并不复杂,只有一个下拉列表,所以没必要创建一个表单,再者,没必要对type做校验,如果没有传递该参数,控制器中作默认为0的处理。

controller

在StatisticsController控制器中,创建actionConversionRate操作:

public function actionConversionRate() {        $query['page'] = isset($_GET['page']) ? intval($_GET['page']) : 1;        $query['perpage'] = isset($_GET['per-page']) && $_GET['per-page'] ? $_GET['per-page'] : 15;        // type不传递的时候,默认为0,为了在页面显示选择类型,并将其传递到view做视图的渲染        $query['type'] = isset($_GET['type']) ? intval($_GET['type']) : 0;        $api = rtrim(Yii::$app->params['statisticsUrl'], '/') . '/statistics/';        $url = $api . 'getConversionRate?' . http_build_query($query);        $data = AppHelper::getData($url);        $count = AppHelper::getData($api . 'getRateCount?type=' . $query['type']);        // 这里面的是一个数据提供器,先不关心        $dataProvider = new \backend\extensions\ArrayDataProvider(            [                'allModels' => $data,                'totalCount' => $count,                'key' => 'ltime',                'sort' => [                    'attributes' => [                        'ltime',                    ],                    'defaultOrder' => [                        'ltime' => SORT_DESC,                    ],                ],                'pagination' => [                    'pageSize' => 15,                ],            ]        );        return $this->render('conversionrate', ['dataProvider' => $dataProvider, 'type' => $query['type']]);    }

纯手工写表单

纯手工写html表单,我相信你会的。我就不写了。

最后,关于ActiveForm和Html的api参看Yii2官网或者中文网站。

转载地址:http://wvghx.baihongyu.com/

你可能感兴趣的文章
svmlight使用说明
查看>>
Swing 和AWT之间的关系
查看>>
Mysql设置自增长主键的初始值
查看>>
Android计时器正确应用方式解析
查看>>
获取post传输参数
查看>>
ASP生成静态页面的方法
查看>>
HDU 1325 Is It A Tree? 判断是否为一棵树
查看>>
Shell命令-文件压缩解压缩之gzip、zip
查看>>
个人总结
查看>>
uva 673 Parentheses Balance
查看>>
Bzoj 2252: [2010Beijing wc]矩阵距离 广搜
查看>>
css 禁止选中文本
查看>>
bzoj2165
查看>>
算术运算表达式正则及分析
查看>>
Oracle 12c 多租户 手工创建 pdb 与 手工删除 pdb
查看>>
shell初涉
查看>>
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)
查看>>
windows添加和删除服务
查看>>
关于云栖,有点无语的几个地方,管理能不能管?
查看>>
Windows线程的同步与互斥
查看>>