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 相关文章推荐
自己动手做一个SQL解释器
Oct 09 PHP
提升PHP性能的21种方法介绍
Jun 25 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
推荐一本PHP程序猿都应该拜读的书
Dec 31 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
CodeIgniter集成smarty的方法详解
May 26 PHP
快速解决PHP调用Word组件DCOM权限的问题
Dec 27 PHP
PHP sdk文档处理常用代码示例解析
Dec 09 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
laravel 4安装及入门图文教程
2014/10/29 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
可以将word转成html的js代码
2010/04/11 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
js电话号码验证方法
2015/09/28 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
python脚本监控docker容器
2016/04/27 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
centos6.4下python3.6.1安装教程
2017/07/21 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
python中pika模块问题的深入探究
2018/10/13 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
Python中的self用法详解
2019/08/06 Python
python随机模块random使用方法详解
2020/02/14 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
社团成立邀请函
2014/01/08 职场文书
教师专业自荐书范文
2014/02/10 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
入伍通知书
2015/04/23 职场文书
钱学森电影观后感
2015/06/04 职场文书