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 相关文章推荐
对Session和Cookie的区分与解释
Mar 16 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
php使用百度ping服务代码实例
Jun 19 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
php创建、获取cookie及基础要点分析
Jan 26 PHP
PHP实现Javascript中的escape及unescape函数代码分享
Feb 10 PHP
php使用Jpgraph绘制3D饼状图的方法
Jun 10 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
Oct 22 PHP
基于php编程规范(详解)
Aug 17 PHP
基于PHP常用文件函数和目录函数整理
Aug 17 PHP
laravel 创建命令行命令的图文教程
Oct 23 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 面向对象详解
2012/09/13 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
php bootstrap实现简单登录
2016/03/08 PHP
PHP操作Redis数据库常用方法示例
2018/08/25 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
Javascript 继承机制实例
2009/08/12 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
运算符&amp;&amp;的三个不同层次
2013/04/07 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
JS实现批量上传文件并显示进度功能
2017/06/27 Javascript
vue双向绑定及观察者模式详解
2019/03/19 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
JS实现分页导航效果
2020/02/19 Javascript
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
python 瀑布线指标编写实例
2020/06/03 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
Python之字典对象的几种创建方法
2020/09/30 Python
使用Python提取文本中含有特定字符串的方法示例
2020/12/09 Python
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
skyn ICELAND官网:冰岛成分天然护肤品
2020/08/24 全球购物
海飞丝广告词
2014/03/20 职场文书
小班评语大全
2014/05/04 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
15个值得收藏的JavaScript函数
2021/09/15 Javascript
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android
利用Python实时获取steam特惠游戏数据
2022/06/25 Python