PHP开发框架之YII框架学习——碾压ThinkPHP不是梦
前 言
JRedu
程序猿是一种慵懒的生物!能少敲一行代码,绝对不会多敲一个字符!所以,越来越多的开发框架应运而生,在帮助我们完成功能的同时,极大程度上也帮我们节省了人力物力,而且也提高了系统的安全性能。
而PHP,号称“世界上最好用的编程语言”!自然也拥有一大群的“脑残粉”,让诸多的PHP程序猿投入到框架的开发过程中。从众所周知的ThinkPHP、PHPCMS,到时下流行的YII、Symfony、Laravel、Workerman、CodeIgniter等众多的框架逐渐成为大家不可或缺的工具。而这其中,YII框架凭借其优雅的语法、安全的性能、可重用的代码、MVC的开发模式等诸多亮点,被越来越多的开发者所采纳使用。
一 、YII框架简介
II框架是由美籍华人薛强于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开发框架。
下载地址可从GitHub获取:https://github.com/yiisoft/yii2/releases/download/2.0.12/yii-basic-app-2.0.12.tgz (小瑞实测,下载缓慢! 如果需要可以评论留言 哦~)
二 、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()
控制器访问方式 http://localhost/web/index.php?r=hello/index
R是route的缩写,格式为r=控制器名/操作名
五 、控制器请求处理
Url中可以在操作名后使用&传递其他参数 例如 ….index.php?r=hello/index&id=3
在控制器中,可以使用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,性能可以大大的优化
出处:http://www.cnblogs.com/jerehedu/
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:

PHP开发框架之YII框架学习——碾压ThinkPHP不是梦的更多相关文章
- Yii框架学习 新手教程(一)
本人小菜鸟一仅仅,为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识,小菜鸟创建了一个群.希望光临本博客的人能够进来交流.寻求 ...
- Yii框架学习笔记(二)将html前端模板整合到框架中
选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/ ...
- Yii 框架学习--01 框架入门
Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架. Yii目前有两个主要的版本: 2.0 和 1.1.本文以YII 2.0.7为例. 环境需求 Yii2.0 框架有一些系统上的需 ...
- Yii框架学习资源盘点
盘点一些Yii框架的常用学习资源. 1.Yii中文论坛 https://www.yiichina.com/ 2.Yii中文网 http://www.yii-china.com/ 3.魏曦教你学Yii2 ...
- <yii 框架学习> yii 框架改为中文提示
工作需要用到yii框架,但发现yii框架自带的提示都是英文的.上网找资料才发现其实可以自己陪置 . 将项目protected/config/main.php里的app配置加上language=> ...
- YII框架学习(二)
YII框架的增删改查 例:一个新闻表的增删改查: (1)首先使用gii工具生成控制器和模型 (2)控制器 <?php class NewsController extends Controlle ...
- YII框架学习(一)
1.安装: windows:将php命令所在的文件夹路径加入到环境变量中,通过cmd命令:进入yii框架中的framework目录,执行: php yiic webapp ../cms linux:类 ...
- yii框架学习(MVC)
路由:两种方式,第一种是默认方式访问,假设配置了虚拟主机,那么localhost/web/index.php?r=admin/index 访问的是controllers目录下的admin控制器里 ...
- Yii 框架学习--02 进阶
应用结构 入口文件 文件位置: web/index.php <?php //开启debug,应用会保留更多日志信息,如果抛出异常,会显示详细的错误调用堆栈 defined('YII_DEBUG' ...
随机推荐
- Android 之异步加载LoaderManager
LoaderManager: Loader出现的背景: Activity是我们的前端页面展现,数据库是我们的数据持久化地址,那么正常的逻辑就是在展示页面的渲染页面的阶段进行数据库查询.拿到数据以后才展 ...
- node.js express mvc轻量级框架实践
本文记录的是笔者最近抽私下时间给朋友做的一个时时彩自动下注系统,比较简单,主要也是为了学习一下node.js. 其实逻辑没什么可以深谈的,主要是想说说这套代码结构.结构如下图: js的代码比较难以维护 ...
- [js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)
接着上文线条样式[js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)继续. canvas提供两种输出文本的方 ...
- oracle数据库备份、还原 (如何将Oracle 11g备份的dat文件导入到10g数据库里面)
如何将Oracle 11g备份的dat文件导入到10g数据库里面 解决方法: 导出的时候后面加上目标数据库的版本号 导出: 在SQL plus下执行:create or replace ...
- VirtualBox安装linux mint教程
准备工作: 1.VirtualBox安装包,官方下载页面. 2.linux mint镜像iso文件,官方下载页面. 安装过程: 1.打开VirtualBox后点击新建,在弹出界面选择专家模式,类型选择 ...
- 关于 String 自我理解
String 的一些认识: String对象是不可变,所以使用 final 修饰 字符串拼接,合理利用 StringBuilder(线程非安全),StringBuffer 线程安全 常用方法就不详细介 ...
- apollo实现c#与android消息推送(一)
之前做了c#推送消息到手机端,限于网络要求,不能使用百度等现成的推送,查了许多资料,七拼八凑终于凑齐,记录下来,即是复习也是希望对来者有所帮助. 我开发的环境是windows,使用java开发的Apa ...
- S2_OOP第二章
第一章 继承 语法 修饰符 子类 extends 父类{ //类定义不封 } 使用extends继承父类的属性和方法.使用super关键字调用父类的方法. 概念 继承是面向对象的三大特特之一,Java ...
- java基础知识及详细笔记
第一章:初识java 1.1.java的概述 ü 什么是计算机程序:计算机按照某种顺序而完成的一系列有序指令的集合. ü Java的作用:1:安装和运行本机上的桌面程序.2:通过浏览器访问面向in ...
- 使用hive客户端java api读写hive集群上的信息
上文介绍了hdfs集群信息的读取方式,本文说hive 1.先解决依赖 <properties> <hive.version>1.2.1</hive.version> ...