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 相关文章推荐
Mysql的常用命令
Oct 09 PHP
ob_start(),ob_start('ob_gzhandler')使用
Dec 25 PHP
UTF8编码内的繁简转换的PHP类
Jul 09 PHP
实测在class的function中include的文件中非php的global全局环境
Jul 15 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
php获取Google机器人访问足迹的方法
Apr 15 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
Zend Framework教程之Zend_Config_Xml用法分析
Mar 23 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 11 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 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查询域名状态whois的类
2006/11/25 PHP
PHP中for循环语句的几种变型
2006/11/26 PHP
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
js style动态设置table高度
2014/10/21 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
Nuxt升级2.0.0时出现的问题(小结)
2018/10/08 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
python BeautifulSoup使用方法详解
2013/11/21 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
Python编写登陆接口的方法
2017/07/10 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
python打开使用的方法
2019/09/30 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
合作经营协议书范本
2014/09/16 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
离职证明范本
2015/06/12 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书