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数组的一些常见操作汇总
Jul 17 PHP
PHP中round()函数对浮点数进行四舍五入的方法
Nov 19 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
php获取图片信息的方法详解
Dec 10 PHP
你不知道的文件上传漏洞php代码分析
Sep 29 PHP
PHP 爬取网页的主要方法
Jul 13 PHP
PHP实现的日历功能示例
Sep 01 PHP
PHP chop()函数讲解
Feb 11 PHP
PHP Trait功能与用法实例分析
Jun 03 PHP
用php如何解决大文件分片上传问题
Jul 07 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
phpmyadmin的#1251问题
2006/11/25 PHP
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
php中全局变量global的使用演示代码
2011/05/18 PHP
php中使用explode查找某个字符是否存在的方法
2011/07/12 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
简单的自定义php模板引擎
2016/08/26 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
koa源码中promise的解读
2018/11/13 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
2019/02/01 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
python使用any判断一个对象是否为空的方法
2014/11/19 Python
python 队列详解及实例代码
2016/10/18 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
python3 下载网络图片代码实例
2019/08/27 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
三个python爬虫项目实例代码
2019/12/28 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
Java模拟试题
2014/11/10 面试题
水果超市创业计划书
2014/01/27 职场文书
初中考试作弊检讨书
2014/02/01 职场文书
教师师德承诺书
2014/03/26 职场文书
个人授权委托书模板
2014/09/14 职场文书
教育实习指导教师评语
2014/12/31 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python