Yii是重量级框架,类似于同ruby on rails,django是同一类型的框架,所以其有的特点在其他框架上都存在,但吸引我研究它的是官方文档凭什么说"Yii 是一个基于组件的高性能 PHP 框架,用于快速开发大型 Web 应用”。以后我也将继续用实践证明他这句话的对错。要知道,django的文档介绍里说的"使用Django,花极少时间即可构建和维护质量上乘的Web应用。"就是说django只适合快速原型,并且原型出来的东西不错,或者说用来做内部管理系统什么的很适合,但外部大型应用不好,而yii说自己是高性能的框架,快速,大型等关键字,很唬人。

  

说明:

1.myController是自己定义的一个控制器,login.php是在myController中login这个action指向执行的view.

2. 虚线表示一个是另一个类的子类.所以myController含有BaseController的那几个方法。所以在login.php中可以使用baseController中的方法。

3. baseController中beginWidget和widget方法都会调用createWidget(),并且在createWidget中使用init方法得到预处理的widget,而后widget和endWidget执行widget对象的run()。

<?php $form=$this->beginWidget('CActiveForm', array('id'=>'login-form','enableClientValidation'=>true,'clientOptions'=>array('validateOnSubmit'=>true,),
)); ?><?php echo $form->textField($model,'username'); ?><?php echo $form->passwordField($model,'password'); ?><div class="row buttons"><?php echo CHtml::submitButton('Login'); ?></div><?php $this->endWidget(); ?>

以上面代码为例子,beginWidget里的array("id"=>"login-form")等参数实际上是类CActiveForm的属性。查看生成的源码:

<form id="login-form" action="/site/login" method="post">

即当前指定了id,method,那么查看CActiveForm还有action属性,增加该属性如:

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

查看源码:

<form id="login-form" action="helloworld" method="post">

以上测试证明了beginWidget就是这样实例化出这个form的widget,但是,如何已控制器进行交互了?

控制器处理:

public function actionLogin(){$model=new LoginForm;// collect user input dataif(isset($_POST['LoginForm'])){$model->attributes=$_POST['LoginForm'];// validate user input and redirect to the previous page if validif($model->validate() && $model->login())$this->redirect(Yii::app()->user->returnUrl);}// display the login form$this->render('login',array('model'=>$model));}

这段代码很让人迷惑,主要是$_POST['LoginForm']那里来的?一般PHP的post请求无外乎$_POST["username"], $_POST["password"],因为$_POST这个属性无外乎就是个array,所以,可以说在yii中,通过使用yii自己的form表单,会对一些name进行处理,然后对$_POST中的值进行修改!

验证一,原始html

<input name="LoginForm[username]" id="LoginForm_username" type="text" />

生成的表单中是这样的代码。当然主要是CHtml完成的。

public static function resolveNameID($model,&$attribute,&$htmlOptions){if(!isset($htmlOptions['name']))$htmlOptions['name']=self::resolveName($model,$attribute);if(!isset($htmlOptions['id']))$htmlOptions['id']=self::getIdByName($htmlOptions['name']);else if($htmlOptions['id']===false)unset($htmlOptions['id']);}

我们的<?php echo $form->textField($model,'username'); ?>这行代码中的textField($model,$attribute,$htmlOptions=array())方法是可以指定$htmlOptions的,即可以指定name属性,但是这里没有指定,所以都各自调用了前面的2个方法

resolveName:

public static function resolveName($model,&$attribute){if(($pos=strpos($attribute,'['))!==false){if($pos!==0)  // e.g. name[a][b]return get_class($model).'['.substr($attribute,0,$pos).']'.substr($attribute,$pos);if(($pos=strrpos($attribute,']'))!==false && $pos!==strlen($attribute)-1)  // e.g. [a][b]name
            {$sub=substr($attribute,0,$pos+1);$attribute=substr($attribute,$pos+1);return get_class($model).$sub.'['.$attribute.']';}if(preg_match('/\](\w+\[.*)$/',$attribute,$matches)){$name=get_class($model).'['.str_replace(']','][',trim(strtr($attribute,array(']['=>']','['=>']')),']')).']';$attribute=$matches[1];return $name;}}return get_class($model).'['.$attribute.']';}

get_class这里是返回的对象的类名,是哪个类呢?

public function actionLogin(){$model=new LoginForm;

是最早我们实例化的这个类。

所以说,要使用yii的类最好得有一个自己的form类。

最后,php是最好的程序语言!包括现在我们自己的免费跑腿派单平台柏布来也,也是php写的

 

转载于:https://www.cnblogs.com/CLTANG/archive/2012/09/25/2700914.html

Yii框架的form处理相关推荐

  1. yii框架相关知识(转)

    2019独角兽企业重金招聘Python工程师标准>>> db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何在页面下边显示s ...

  2. PHP yii 框架源码阅读(一)

    转载链接:http://www.th7.cn/Program/php/2012/04/03/67983.shtml 目录文件 |- framework 框架核心库 |-|- base 底层类库文件夹, ...

  3. YII 框架使用之——创建应用

    linux环境为UBUNTU14.04,YII框架的版本是1.1.17 将下载的YII解压缩,压缩后会有三个文件夹,"demos,requirements,framework",d ...

  4. Yii 框架执行流程

    https://blog.csdn.net/qq_25551295/article/details/51236174 一 目录文件 |-framework     框架核心库 |--base      ...

  5. php widgets,Yii框架小部件(Widgets)用法实例详解

    目录 小部件 使用小部件 配置全局默认值 创建小部件 最佳实践 本文实例讲述了Yii框架小部件(Widgets)用法.分享给大家供大家参考,具体如下: 小部件 小部件是在 视图 中使用的可重用单元, ...

  6. yii框架下的后台管理员登录操作

    在搭建好后台的网页之后,我们需要实现网页中的功能,如登录,注册,记住密码等等.以下分步进行. 本文使用yii框架. 后台管理员的登录: 1,在mysql中建立管理员的数据表; 编写sql文件,具体代码 ...

  7. PHP开发框架之YII框架学习——碾压ThinkPHP不是梦

      前  言 JRedu 程序猿是一种慵懒的生物!能少敲一行代码,绝对不会多敲一个字符!所以,越来越多的开发框架应运而生,在帮助我们完成功能的同时,极大程度上也帮我们节省了人力物力,而且也提高了系统的 ...

  8. php框架里有模版引擎吗,Yii框架用模版引擎了吗?_PHP开发框架教程

    Yii框架用模版引擎了吗? Yii框架没有用模版引擎,Yii照样采纳原始PHP作为模板语法,该框架是一个基于组件的高性能PHP框架,用于开发大型Web运用,而且采纳严厉的OOP编写,并供了Web运用开 ...

  9. yii框架学习(五)get、post请求如何接收请求参数

    get请求接收参数 修改之前的actionIndex请求,在括号中添加$name参数既可以使用 public function actionIndex($name){echo 'Hello World ...

最新文章

  1. 北恒生物获德诚资本约1亿元A轮融资,德诚资本投资
  2. 12c oracle 修改内存_关于Oracle数据库12c 新特性总结
  3. java implements interface_java接口(interface)与现实(implements)
  4. 王道考研 计算机网络5 分层结构 协议 服务 接口
  5. 堪比黑石 花旗、摩根大通的股东 揭开贝莱德的神秘面纱
  6. 学习Globle和window对象学习心得+jquery中的$(#id)与document.getElementById(id)的区别+成功激活win10的方法
  7. Linux和git起步
  8. oracle物理备份与恢复,ORACLE数据库备份与恢复详解
  9. 包引入中,在包名前使用下划线“_”
  10. 父亲将房子过户给后代需要交税吗
  11. winmerge代码比较器文件夹比较内容
  12. 基于MVS的三维重建算法学习笔记(二)— 立体视觉的几何基础总结
  13. 中啦 Computers in Biology and Medicine(CIBM)-- 投稿经验分享
  14. Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoising
  15. 计算机与我的生活英语作文,描写一天的生活英语作文(通用7篇)
  16. 【新闻文本分类】(task5)TextCNN(更新ing)
  17. vue3项目实战---知乎日报----首页功能
  18. 从改简历到面试需要知道的
  19. 电脑C盘清理空间实用技巧
  20. centos stream8 安装gitlab,和上传文件

热门文章

  1. 欧拉公式——真正的宇宙第一公式
  2. 神经科学中的数学之美
  3. 华为鸿蒙系统四大特性:基于微内核,面向全场景,分布式架构
  4. 【科普】AI的分类与演进
  5. 神经网络并不是尚方宝剑,我们需要正视深度 NLP 模型的泛化问题
  6. 要毁灭人类、喷马斯克、还获得公民身份的Sophia,是假的
  7. 我总有办法让你今晚回不了家...
  8. Clubhouse 本土化之后干得过“顶流”抖音快手吗? | 极客视频
  9. 996 成福报?拼多多个别部门让员工在 “11-11-6” 和 996 中二选一
  10. 华为、阿里员工跳槽至微软受抵制,微软当事人称:只是玩梗