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 相关文章推荐
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 PHP
通过对服务器端特性的配置加强php的安全
Oct 09 PHP
弄了个检测传输的参数是否为数字的Function
Dec 06 PHP
PHP 定界符 使用技巧
Jun 14 PHP
PHP 程序员应该使用的10个组件
Oct 31 PHP
PHP5中新增stdClass 内部保留类
Jun 13 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
Dec 14 PHP
PHP实现二维数组中的查找算法小结
Jun 09 PHP
Yii2框架加载css和js文件的方法分析
May 25 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 PHP
实例讲解PHP表单
Jun 10 PHP
详解PHP Swoole与TCP三次握手
May 27 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+JS+rsa数据加密传输实现代码
2011/03/23 PHP
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
Vue实现active点击切换方法
2018/03/16 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
python给list排序的简单方法
2020/12/10 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
人间正道是沧桑观后感
2015/06/15 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书