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 相关文章推荐
用PHPdig打造属于你自己的Google[图文教程]
Feb 14 PHP
Php header()函数语法及使用代码
Nov 04 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
php实现过滤字符串中的中文和数字实例
Jul 29 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
Mar 01 PHP
PHP遍历目录文件的常用方法小结
Feb 03 PHP
php file_get_contents取文件中数组元素的方法
Apr 01 PHP
PHP删除数组中指定下标的元素方法
Feb 03 PHP
YII分模块加载路由的实现方法
Oct 01 PHP
swoole_process实现进程池的方法示例
Oct 29 PHP
PHP 获取客户端 IP 地址的方法实例代码
Nov 11 PHP
laravel5.2表单验证,并显示错误信息的实例
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
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
Vue不能观察到数组length的变化
2018/06/08 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
微信网页登录逻辑与实现方法
2019/04/29 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
Python批量查询域名是否被注册过
2017/06/21 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
python 元组的使用方法
2020/06/09 Python
python爬取微博评论的实例讲解
2021/01/15 Python
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
小学生防溺水广播稿
2014/01/12 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
政风行风建设整改方案
2014/10/27 职场文书
大客户经理岗位职责
2015/04/09 职场文书
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL