Yii框架表单提交验证功能分析


Posted in PHP onJanuary 07, 2017

本文实例讲述了Yii框架表单提交验证功能。分享给大家供大家参考,具体如下:

一、前端提交的三种方式

前面已经提出,表单提交一共只有三种方式。

1. 前端原生html

(1)原生html标签

首先,直接使用html标签的input,a等;
其次,使用css进行布局。
再次,使用js或jquery方式验证
最后,提交(get/post/ajax,目前较多使用jquery提交)。
注:该种方式由于较灵活,使用最多。

(2)原生form

js或jquery方式验证,yii方式提交。

相对灵活

<form ... onSubmit="return validationFunc">
...
</form>
<script type="text/javascript">
function validationFunc(){
  //验证逻辑
}
</script>

批注:如果仅仅使用表单自带的onsubmit验证不够,也可以采用第一种办法。此时就不要使用form自带的submit按钮了。

2,前端使用yii自带widget

(3)yii方式验证、提交。

① 自带blog登陆表单

<?php
    $form=$this->beginWidget('CActiveForm', array(
      'id'=>'login-form',
      'enableClientValidation'=>true,
      'clientOptions'=>array(
        'validateOnSubmit'=>true,
      ),
    ));
  ?>

② 上传用户头像时

<?php $form=$this->beginWidget('CActiveForm', array(
  'id'=>'user-form',
  'enableAjaxValidation'=>false,
  'htmlOptions'=>array('enctype'=>'multipart/form-data'),
)); ?>

③ 看到的一个例子

<?php $form=$this->beginWidget('CActiveForm',array(
  'id'=>'login-from',
  'enableAjaxValidation'=>true,
  'action'=>'array('site/login'),
  )
)
?>

此时用到yii的表单验证功能。需要model+controller+view配合使用。详见:yii指南。

Yii方式验证、提交

① 首先,在model的rules(){return array();}设置验证规则

② 其次,在view里使用errorMessage,label,field,error

<?php echo $form->labelEx($model,'author'); ?>
<?php echo $form->textField($model,'author',array('size'=>60,'maxlength'=>128)); ?>
<?php echo $form->error($model,'author'); ?>

3,最后,在controller里

使用

$model = new Post;
$model->attributes=$_POST['Post'];

yii判断提交方式

Yii::app()->request->isPostRequest

效率比较:

(1)效率最差;
(2)效率中等;
(3)效率最高。

二、Yii在后端接收前端传来值的两种方式

1,通过二维数组$_POST['ClassName']

如果前端的表单是关于某一个model的,可以用此方法。使用较多。

例如:

$model->attributes=$_POST['Post'];
$comment->attributes=$_POST['Comment'];

还可以添加:

$comment->post_id=$this->id;

强制数据提交

$model->save(false)

2,获取get或post请求的值$this->request->getParam('key');

(1)form表单提交

前端:

<form>
<input type="text" name="belongs_to" />
<input type="submit" value="提交" />
</form>

后端:

$this->request->getParam('belongs_to');

(2)jquery的post提交

$this->request->getParam('key1');

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
使用PHP的日期与时间函数技巧
Apr 24 PHP
php程序的国际化实现方法(利用gettext)
Aug 14 PHP
解析PHP中的正则表达式以及模式匹配
Jun 19 PHP
php实现根据词频生成tag云的方法
Apr 17 PHP
PHP 二维数组和三维数组的过滤
Mar 16 PHP
php英文单词统计器
Jun 23 PHP
PHP请求Socket接口测试实例
Aug 12 PHP
php正则修正符用法实例详解
Dec 29 PHP
php面向对象之反射功能与用法分析
Mar 29 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 PHP
Yii框架弹出框功能示例
Jan 07 #PHP
Yii框架弹出窗口组件CJuiDialog用法分析
Jan 07 #PHP
PHP验证码类ValidateCode解析
Jan 07 #PHP
PHP缩略图生成和图片水印制作
Jan 07 #PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 #PHP
PHP实现移除数组中为空或为某值元素的方法
Jan 07 #PHP
PHP中仿制 ecshop验证码实例
Jan 06 #PHP
You might like
隐性调用php程序的方法
2009/03/09 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
jquery tools系列 expose 学习
2009/09/06 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
jQuery选择器之子元素过滤选择器
2017/09/28 jQuery
three.js加载obj模型的实例代码
2017/11/10 Javascript
vue配置接口域名方法总结
2019/05/12 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
python处理csv数据的方法
2015/03/11 Python
Python的time模块中的常用方法整理
2015/06/18 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
python实现扫描ip地址的小程序
2019/04/16 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
Java模拟试题
2014/11/10 面试题
思想品德课教学反思
2014/02/10 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
医生个人自我剖析材料
2014/10/08 职场文书
三国演义读书笔记
2015/06/25 职场文书
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python
解析目标检测之IoU
2021/06/26 Python
Vite + React从零开始搭建一个开源组件库
2022/06/25 Javascript