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 相关文章推荐
解决ajax+php中文乱码的方法详解
Jun 09 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
php类常量用法实例分析
Jul 09 PHP
PHP使用MPDF类生成PDF的方法
Dec 08 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
Apr 14 PHP
PHP学习笔记之php文件操作
Jun 03 PHP
再谈PHP中单双引号的区别详解
Jun 12 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
Jun 15 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 15 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 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实现文件安全下载
2006/10/09 PHP
php去除重复字的实现代码
2011/09/16 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
繁简字转换功能
2006/07/19 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
vue2.X组件学习心得(新手必看篇)
2017/07/05 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
Python中zfill()方法的使用教程
2015/05/20 Python
Python计算斗牛游戏概率算法实例分析
2017/09/26 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
Python八皇后问题解答过程详解
2019/07/29 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
智乐游戏测试笔试题
2014/05/21 面试题
大型晚会策划方案
2014/02/06 职场文书
铁路工务反思材料
2014/02/07 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
本溪水洞导游词
2015/02/11 职场文书
2015年财政所工作总结
2015/04/25 职场文书
2015年征兵工作总结
2015/07/23 职场文书