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 表单提交给自己
Jul 24 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
Jan 06 PHP
解析PHP实现多进程并行执行脚本
Jun 18 PHP
PHP中echo和print的区别
Aug 28 PHP
php跨站攻击实例分析
Oct 28 PHP
php检索或者复制远程文件的方法
Mar 13 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
PHP pear安装配置教程
May 14 PHP
php微信公众平台开发(三)订阅事件处理
Dec 06 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
Mar 09 PHP
thinkPHP5.0框架安装教程
Mar 25 PHP
PHP分享图片的生成方法
Apr 25 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
详解WordPress中添加友情链接的方法
2016/05/21 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
原生JS实现跑马灯效果
2017/02/20 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
图解javascript作用域链
2019/05/27 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
python统计日志ip访问数的方法
2015/07/06 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
微型企业创业投资计划书
2014/01/10 职场文书
办公室文员自荐书
2014/02/03 职场文书
学校宣传标语
2014/06/18 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
学生检讨书如何写
2014/10/30 职场文书
导游词开场白
2015/01/31 职场文书
寒假安全保证书
2015/02/28 职场文书
人事任命通知书
2015/04/21 职场文书
关于军训的感想
2015/08/07 职场文书
用Python实现屏幕截图详解
2022/01/22 Python