您的位置:首页 > 编程语言 > PHP开发

Yii2.0 ActiveForm 表单应用整理

2016-04-21 16:15 639 查看
今天打算整理用YII框架自己ActiveForm的表单生成方式

如下图所示, 就是一个表单,我自己没有写form,input...



在model文件中:

【下面是rules规则】

public function rules()
{
return [
[['user_id', 'scope_id', 'cate_id', 'report_status', 'created_at', 'updated_at'], 'integer'],
[['report_com_name', 'report_com_address', 'report_com_desc', 'scope_id', 'cate_id', 'report_content', 'report_name', 'report_mobile'], 'required'],
[['report_com_url', 'report_com_address'], 'string', 'max' => 200],
[['report_content', 'report_com_desc'], 'string', 'max' => 1000],
[['report_com_name'], 'string', 'max' => 100],
[['report_name'], 'string', 'max' => 30],
[['report_mobile'], 'string', 'max' => 11],
[['report_email'], 'string', 'max' => 200],
['report_mobile', function ($attribute, $params) {
//这是自己写的规则,和框架里的不一样,不能像他们一下,一个数据没填,就直接提示,而自己写的规则需要点击提交后才能去验证
if (strlen($this->$attribute) != 11) {
$this->addError($attribute, '手机号码必须是11位');
}
}],
];
}
// 属性标签

public function attributeLabels()
{
return [
'report_id' => '报道ID',
'user_id' => '用户ID',
'scope_id' => '行业分类',
'cate_id' => '报道方向',
'report_com_name' => '公司名称',
'report_com_url' => '公司网址',
'report_com_address' => '公司地址',
'report_com_desc' => '公司简介',
'report_content' => '简述报道内容',
'report_name' => '联系人姓名',
'report_mobile' => '联系方式',
'report_email' => '邮箱',
// 'report_status' => 'Report Status',
// 'created_at' => 'Created At',
// 'updated_at' => 'Updated At',
];
}
【模板文件-表单部分代码】

<?php
$form = ActiveForm::begin([
'options' => ['enctype' => 'multipart/form-data', 'class' => ''],
'method' => 'post',
]);
?>
<div class="formitem cf">
<?php
echo $form->field($model, 'report_com_name', ['template' => "\n{label}{input}\n<div class='error'>{error}</div>"])
->textInput(['placeholder' => "请输入您公司名称"])
->label("<i class=\"star\">*</i>{$labels['report_com_name']}", ['class' => "fl"])
?>
</div>
<div class="formitem cf">
<?php
echo $form->field($model, 'report_com_url', ['template' => "\n{label}{input}"])
->textInput(['placeholder' => "请输入您公司网址"])
->label("{$labels['report_com_url']}", ['class' => "fl"]);
?>
</div>
<div class="formitem cf">
<?php
echo $form->field($model, 'report_com_address', ['template' => "\n{label}{input}\n<div class='error'>{error}</div>"])
->textInput(['placeholder' => "请输入您公司地址"])
->label("<i class=\"star\">*</i>{$labels['report_com_address']}", ['class' => "fl"]);
?>
</div>
<div class="formitem cf">
<?php
echo $form->field($model, 'report_com_desc', ['template' => "\n{label}{input}\n<div class='error'>{error}</div>"])
->textarea(['placeholder' => "请输入您公司简介"])
->label("<i class=\"star\">*</i>{$labels['report_com_desc']}", ['class' => "fl"]);
?>
</div>

<div class="formitem cf">
<?php
echo $form->field($model, 'scope_id', ['template' => "\n{label}{input}\n<div class='error'>{error}</div>"])
->dropDownList($scopeDatas)
->label("<i class=\"star\">*</i>{$labels['scope_id']}", ['class' => "fl"]);
?>
</div>
<div class="formitem cf">
<?php
echo $form->field($model, 'cate_id', ['template' => "\n{label}{input}\n<div class='error'>{error}</div>"])
->dropDownList($cateDatas)
->label("<i class=\"star\">*</i>{$labels['cate_id']}", ['class' => "fl"]);
?>
</div>
<div class="formitem cf">
<?php
echo $form->field($model, 'report_content', ['template' => "\n{label}{input}\n<div class='error'>{error}</div>"])
->textarea(['placeholder' => "请输入报道内容"])
->label("<i class=\"star\">*</i>{$labels['report_content']}", ['class' => "fl"]);
?>
</div>
<div class="formitem cf">
<?php
echo $form->field($model, 'report_name', ['template' => "\n{label}{input}\n<div class='error'>{error}</div>"])
->textInput(['placeholder' => "请输入联系人姓名"])
->label("<i class=\"star\">*</i>{$labels['report_name']}", ['class' => "fl"]);
?>
</div>
<div class="formitem cf">
<?php
echo $form->field($model, 'report_mobile', ['template' => "\n{label}{input}\n<div class='error'>{error}</div>"])
->textInput(['placeholder' => "请输入联系方式"])
->label("<i class=\"star\">*</i>{$labels['report_mobile']}", ['class' => "fl"]);
?>
</div>
<div class="formitem cf">
<?php
echo $form->field($model, 'report_email', ['template' => "\n{label}{input}"])
->textInput(['placeholder' => "请输入您的邮箱"])
->label("{$labels['report_email']}", ['class' => "fl"]);
?>
</div>
<div class="formitem cf">
<label class="fl"></label>
<div class="fl">
<?= Html::submitButton('提交认证', ['class' => 'coarsebtn subbtn']) ?>
</div>
</div>
<?php ActiveForm::end() ?>
【当表单数据填写完毕时,在控制器方法中处理方式】

//寻求报道

public function actionSeekReport()
{
$mEnumScode = new EnumScode();
$mEnumCate = new EnumCate();
$model = new Report();

$scopeData = $mEnumScode->getScopeData();
$cateData = $mEnumCate->getData();

$cateDatas['0'] = '请选择';
$scopeDatas['0'] = '请选择';

if ($scopeData && is_array($scopeData)) {
foreach ($scopeData as $key => $value) {
if ($value['scope_id'] && $value['scope_name']) {
$scopeDatas[$value['scope_id']] = $value['scope_name'];
}
}
}

if ($cateData && is_array($cateData)) {
foreach ($cateData as $key => $value) {
if ($value['cate_id'] && $value['cate_name']) {
$cateDatas[$value['cate_id']] = $value['cate_name'];
}
}
}

// 提交数据处理
$model->user_id = $this->user->id;
//说明:
代码: $model->load(Yii::$app->request->post()
作用: 将表单提交的数据给了model对象
代码: $model->save()
作用: 表单提交验证完后(具体验证就是:model里面的rules方法中写的规则),就进行save保存处理
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['demands']);
}

return $this->render('/user/demands/seek_report', [
'scopeDatas' => $scopeDatas,
'cateDatas' => $cateDatas,
'model' => $model,
]);
}

具体学习网址: http://www.getyii.com/doc-2.0/guide/start-forms.html
感想:

我以前都是我们通常的form表单方式,这个用到了activeForm表单方式,还是我了解的太少了,我以为只有后台才会用到这种情况,因为用gii自动生成的curd文件中的form文件有这种方式,原来它们都是通用,只是看你怎么灵活的运用,还有就是我平时做添加表操作,都是单独在model方法中写一个add方法,而现在是利用框架自带的特性,省去了好多的代码。感觉不错....

这是我同事给我说的这种方式,我真学到了,其实啊,在工作中只要你好好干,你会学到好多你不知道的东西,以前当我有任务时,我老认为工作是为公司,有一点时间就想休息,现在啊,想的不是了,我现在就是认为你工作是一方面,还有一方面就是你把它当做你自己的事,你会有不一样的体验,更有不一样的心情,只要每天心情开心了,效率才好,学的才多!所以,加油!现在你是很笨,或许人家给你定位你技术很low,但是你要证明一下,总有一天,你会让他们另眼相看!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: