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 相关文章推荐
PHP的面试题集,附我的答案和分析(一)
Nov 19 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
ThinkPHP模板IF标签用法详解
Jul 01 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
Oct 23 PHP
PHP 前加at符合@的作用解析
Jul 31 PHP
php获取文件后缀的9种方法
Mar 22 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
thinkphp中的多表关联查询的实例详解
Oct 12 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
Mar 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
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
深入PHP变量存储的详解
2013/06/13 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
php 算法之实现相对路径的实例
2017/10/17 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
2019/03/25 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
Javascript 刷新全集常用代码
2009/11/22 Javascript
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
javascript正则表达式总结
2016/02/29 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
2018/05/22 jQuery
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
pyhton列表转换为数组的实例
2018/04/04 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
Django2.1.7 查询数据返回json格式的实现
2020/12/29 Python
上课迟到检讨书
2014/02/19 职场文书
保密工作责任书
2014/04/16 职场文书
初中生期末评语大全
2014/04/24 职场文书
高中教师考核方案
2014/05/18 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书