yii框架表单模型使用及以数组形式提交表单数据示例


Posted in PHP onApril 30, 2014

按Yii文档里的描述,Yii在处理表单的一般过程是:

创建表单对应的模型类,设置字段验证规则
创建表单提交对应的action,处理提交的内容
在视图中创建表单form
在刚刚的一个小项目里,想使用ajax提交表单信息并验证保存,又不想用隐藏iframe来做无刷新提交,并且action中能够用到模型类的校验方法,就想到使用表单数组提交的方式,举个例子:

form代码:

<form action='' method='post' name='form_test'>
    <input type='text' name='arr[]' value='1'>
    <input type='text' name='arr[]' value='2'>
    <input type='text' name='arr[]' value='3'>
</form>

提交后可以直接使用 $_POST['arr'] 来获取提交的数据,$_POST['arr'] 为:
Array
(
    [0] => a
    [1] => b
    [2] => c
)

同理,如果使用以下form提交:
<form action='' method='post' name='form_test'>
    <input type='text' name='arr[3]' value='a'>
    <input type='text' name='arr[6]' value='b'>
    <input type='text' name='arr[8]' value='c'>
</form>
$_POST['arr'] 为:
Array
(
    [3] => a
    [6] => b
    [8] => c
)

当然也能提交二维数组:
<form action='http://127.0.0.1/zhaobolu/test.php' method='post' name='form_test'>
    <input type='text' name='arr[][name1]' value='a'>
    <input type='text' name='arr[][name2]' value='b'>
    <input type='text' name='arr[][name3]' value='c'>
</form>
$_POST['arr'] 为:

Array
(
    [0] => Array
        (
            [name1] => a
        )
    [1] => Array
        (
            [name2] => b
        )
    [2] => Array
        (
            [name3] => c
        )
)

这里有一个问题,如果不设置第一个子数组的key,在生成数组时会将每个值顺序在arr中添加,如果想将信息保存在一个array中,添加一个key值即可,如下:

<form action='http://127.0.0.1/zhaobolu/test.php' method='post' name='form_test'>
    <input type='text' name='arr[a][name1]' value='a1'>
    <input type='text' name='arr[a][value1]' value='a2'>
    <input type='text' name='arr[b][name2]' value='b1'>
    <input type='text' name='arr[b][value2]' value='b2'>
</form>
$_POST['arr'] 为:
Array
(
    [a] => Array
        (
            [name1] => a1
            [value1] => a2
        )
    [b] => Array
        (
            [name2] => b1
            [value2] => b2
        )
)

 

下面贴一下用ajax提交表单并且用yii表单模型验证的示例,首先是模型类部分,只有最简单的校验方法:

<?php
class LandingForm extends CFormModel
{
    public $landing_title;
    public $landing_content;
    public $landing_position;
    public function rules()
    {
        return array(
            array('landing_title, landing_content', 'required'),
            array('landing_position', 'default', 'value'=>''),
        );
    }
}

发现个比较有意思的,就是模型类在设置参数校验的方法时,需要对每一个public参数都设置规则,如果有未设置规则的参数,在用$_POST中的表单值为模型赋值后,未设置规则的参数值将为空

action中获取表单提交的参数并且校验:

$model = new LandingForm;
$model->attributes = $_POST['form'];
if($model->validate()){
    $info = $model->attributes;
    ... 
}

最后是前端提交表单部分的代码,用的jquery:

var info = new Object();
info = { 'form[landing_title]': landing_title,
        'form[landing_content]': landing_content,
        'form[landing_position]': landing_position,
        };
var url = "...";
$.post(url, info, function(rst){
    ... 
});
PHP 相关文章推荐
2.PHP入门
Oct 09 PHP
一步一步学习PHP(5) 类和对象
Feb 16 PHP
php设计模式 Adapter(适配器模式)
Jun 26 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
yii用户注册表单验证实例
Dec 26 PHP
简单介绍PHP非阻塞模式
Mar 03 PHP
YII Framework框架教程之安全方案详解
Mar 14 PHP
PHP生成制作验证码的简单实例
Jun 12 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
Nov 04 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 #PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
Apr 29 #PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
Apr 29 #PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 #PHP
PHP include任意文件或URL介绍
Apr 29 #PHP
php调用google接口生成二维码示例
Apr 28 #PHP
php将字符串转化成date存入数据库的两种方式
Apr 28 #PHP
You might like
php数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
php设计模式 Delegation(委托模式)
2011/06/26 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
PHP数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
iview在vue-cli3如何按需加载的方法
2018/10/31 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
python进程和线程用法知识点总结
2019/05/28 Python
python调用摄像头拍摄数据集
2019/06/01 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
社区包粽子活动方案
2014/01/21 职场文书
小学教师听课制度
2014/02/01 职场文书
书香家庭事迹材料
2014/05/09 职场文书
个性婚礼策划方案
2014/05/17 职场文书
比赛口号大全
2014/06/10 职场文书
2014年体育工作总结
2014/11/24 职场文书
同学会邀请函模板
2015/01/30 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python
Python函数式编程中itertools模块详解
2021/09/15 Python
python Tkinter模块使用方法详解
2022/04/07 Python