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 相关文章推荐
一个ftp类(ini.php)
Oct 09 PHP
利用js调用后台php进行数据处理原码
Oct 09 PHP
PHP中对数据库操作的封装
Oct 09 PHP
比较好用的PHP防注入漏洞过滤函数代码
Apr 11 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
解析php中call_user_func_array的作用
Jun 07 PHP
php+mysql实现无限级分类
Nov 11 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
Mar 23 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
Oct 08 PHP
替换php字符串中的单引号为双引号的方法
Feb 16 PHP
php 使用mpdf实现指定字段配置字体样式的方法
Jul 29 PHP
Yii框架布局文件的动态切换操作示例
Nov 11 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的header和asp中的redirect比较
2006/10/09 PHP
PHP面向对象概念
2011/11/06 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
2014/07/25 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
Python随机生成一个6位的验证码代码分享
2015/03/24 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
python利用正则表达式搜索单词示例代码
2017/09/24 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
python em算法的实现
2020/10/03 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
历史系毕业生自荐信
2013/10/28 职场文书
新驾驶员个人自我评价
2014/01/03 职场文书
合作意向书范本
2014/03/31 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
党小组意见范文
2015/06/08 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL