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 相关文章推荐
用PHP和ACCESS写聊天室(九)
Oct 09 PHP
php注销代码(session注销)
May 31 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
Aug 06 PHP
PHP实现更新中间关联表数据的两种方法
Sep 01 PHP
PHP闭包实例解析
Sep 08 PHP
thinkphp中html:list标签传递多个参数实例
Oct 30 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
Yii2 assets清除缓存的方法
May 16 PHP
基于PHP微信红包的算法探讨
Jul 21 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
详解PHP变量传值赋值和引用赋值变量销毁
Mar 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如何透过ODBC来存取数据库
2006/10/09 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
javascript下function声明一些小结
2007/12/28 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
详解Python中is和==的区别
2019/03/21 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
python将数据插入数据库的代码分享
2020/08/16 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
RealTek面试题
2016/06/28 面试题
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
室内设计专业学生的自我评价分享
2013/11/27 职场文书
学前班教师的自我鉴定
2013/12/05 职场文书
教师党员公开承诺事项
2014/05/28 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
音乐课外活动总结
2015/05/09 职场文书
运动会800米赞词
2015/07/22 职场文书
国庆节主题班会
2015/08/15 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
Pytest allure 命令行参数的使用
2021/04/18 Python