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 相关文章推荐
967 个函式
Oct 09 PHP
实用PHP会员权限控制实现原理分析
May 29 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
php strrpos()与strripos()函数
Aug 31 PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 PHP
php字符串过滤与替换小结
Jan 26 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 PHP
分享php邮件管理器源码
Jan 06 PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
Aug 03 PHP
php实现推荐功能的简单实例
Sep 29 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数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
JqGrid web打印实现代码
2011/05/31 Javascript
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
2012/03/21 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
JS的数组迭代方法
2015/02/05 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
jQuery实现弹幕效果
2017/02/17 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
Vue异步加载about组件
2017/10/31 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
Angular中支持SCSS的方法
2017/11/18 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
使用Python下载Bing图片(代码)
2013/11/07 Python
详解python中的Turtle函数库
2018/11/19 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
招聘与培训专员岗位职责
2014/01/30 职场文书
八一演出活动方案
2014/02/03 职场文书
2014新年元旦活动策划方案
2014/02/18 职场文书
一年级学生评语
2014/04/23 职场文书
2014年电厂工作总结
2014/12/04 职场文书
五好家庭申报材料
2014/12/20 职场文书
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
java代码实现空间切割
2022/01/18 Java/Android
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏