概述程序猿是一种慵懒的生物!能少敲一行代码,绝对不会多敲一个字符!所以,越来越多的开发框架应运而生,在帮助我们完成功能的同时,极大程度上也帮我们节省了人力物力,而且也提高了系统的安全性能。
而php,号称“世界上最好用的编程语言”!自然也拥有一大群的“脑残粉”,让诸多的php程序猿投入到框架的开发过程中。从众所周知的thinkphp、phpcms,到时下流行的yii、symfony、laravel、workerman、codeigniter等众多的框架逐渐成为大家不可或缺的工具。而这其中,yii框架凭借其优雅的语法、安全的性能、可重用的代码、mvc的开发模式等诸多亮点,被越来越多的开发者所采纳使用。
一. yii框架简介yii框架是由美籍华人薛强于2008年开始研发,是一个适用于开发 web2.0 应用程序的高性能 php 框架。经过1年多的研发,与2008年12月3日发布yii 1.0版本,发布后深受广大开发者所喜爱。
而中国是 yii 全球第三大市场,,小米等企业在开发 php 时首选 yii 框架。目前,yii的最新版本是yii 2.0.12,在 php 5.4.0 版本以上完全重写了 yii,并且完全兼容 php 7.x。它的目的是成为一个最先进的新一代的php开发框架。
二. yii的启动安装yii框架下载后,直接解压放到网站的根目录即可。解压后目录结构如下:
下载后,可以首先访问根目录中的requirements.php文件,这个文件用于检测系统是否支持yii框架。注意,yii 2.0要求最低的php版本必须是php5.4以上。否则验证不通过。
验证通过后,可以访问框架的入口脚本文件:web/index.php ,这是我们唯一可以访问的一个文件。也是我们网站的主页面。
注意:访问前必须配置cookievalidationkey 访问config/web.php 修改” cookievalidationkey”=>””,修改为任意字符串即可,否则后续功能将会受限不能使用。
三. yii 请求流程处理yii系统的访问从入口脚本文件开始,经过默认的控制器,由控制器决定读取哪个模型,加载哪个模块或应用组件,显示哪个视图。 也就是说,控制器的代码将是我们操作的核心部分。
yii应用的结构示意图如下,大家可以适当参考:
yii应用的静态结构
四. 控制器创建
位置:controllers/ 下可以新建控制器
① 新建的控制器必须以controller结尾,例如hellocontroler.php
② 控制器的类名与文件同名,必须放在命名空间中 app\controllers
③ 控制器必须继承controller类,需要use yii\web\controller
④ 控制器中必须包含操作方法,操作需用action开头,例如 actionindex()
控制器访问方式
在控制器中,可以使用request请求组件,读取传递到控制器的值;
使用方式: \yii::app->request(); 拿到request请求组件,注意yii是全局类需要加\
拿到request请求组件使用get()/post()/isget/ispost等方法和属性。
六. 控制器响应使用\yii::app->response(); 拿到响应组件
七. session处理使用\yi::app->session获取session组件
八. cookie处理使用\yii::app->response->cookies; 拿到cookie组件
cookie数据会使用上述提到的config/web.php 中的” cookievalidationkey”进行加密
九. 视图的创建视图文件需要建立在views文件夹中,并包含在与控制器同名的文件夹名字中:
控制器中加载视图文件:
$this->renderpartial(“视图文件名”); 不会加载布局文件;
$this->render(“视图文件名”); 会加载默认的布局文件;
十. 视图传递数据控制器中传递数据:
视图中接收数据:
十一. 视图传递数据安全性
十二. 布局文件布局文件创建在: views/layouts/文件夹下
控制器写法:
布局文件载入:
十三. 视图中显示视图在index视图中载入about视图,并向about视图传参:
在about视图中接收参数:
十四. 视图之数据块视图中,定义数据块:
布局文件中根据是否有数据块,显示数据块内容:
十五. 数据块配置在config中修改db.php文件修改数据块配置
十六. 活动记录在models文件夹下,建立数据模型
① 活动记录文件必须在命名空间app\models下;
② 必须继承activerecord类,在yii\db\activerecord命名空间下;
③ 建立后,可操作与活动记录类同名的表,也可以使用静态tablename方法返回表名
十七. 单表查询
十八. 单表删除
十九. 单表添加数据
tset活动记录类编写rules方法
二十. 单表修改数据
二十一. 关联查询首先,新建两个表的数据模型,即活动记录;
一对多关系关联(例如,根据顾客名字查询订单):
还可以使用::classname()替换到完整类名
为了提高性能,减少controller与model的耦合,可以将上述方封装到model中:
在控制器中,调用方法或者属性即可:
注:使用属性调用时,需将model中的方法最后的->all()去掉,因为当调用一个不存在属性时,会默认调用__get()魔术方法,yii框架在这个魔术方法中为我们自动调用了->all()
一对一关系关联(例如,根据订单中的顾客id查询顾客姓名):
model中编写方法:
控制器中调用:
使用方法调用需补齐->one();
使用属性调用,会自动补齐
二十二. 关联查询性能关联结果缓存:
解释:第一次调用方法读取数据,会自动执行sql语句,以后再调用就会自动缓存结果不会再执行sql,可以使用unset()函数,让执行时继续重新调用最新数据;
关联多次查询
解释:上述代码会执行一次循环便执行一遍sql,最后查询n多次;
解释:改写后执行第一行代码,相当于执行两条sql语句,在循环时不会再执行sql,性能可以大大的优化