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

  前  言

JRedu

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

 而PHP,号称“世界上最好用的编程语言”!自然也拥有一大群的“脑残粉”,让诸多的PHP程序猿投入到框架的开发过程中。从众所周知的ThinkPHP、PHPCMS,到时下流行的YII、Symfony、Laravel、Workerman、CodeIgniter等众多的框架逐渐成为大家不可或缺的工具。而这其中,YII框架凭借其优雅的语法、安全的性能、可重用的代码、MVC的开发模式等诸多亮点,被越来越多的开发者所采纳使用。

 

一 、YII框架简介

II框架是由美籍华人薛强于2008年开始研发,是一个适用于开发 Web2.0 应用程序的高性能 PHP 框架。经过1年多的研发,与2008123日发布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

Rroute的缩写格式为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下;

②  必须继承ActiveRecordYII\db\ActiveRecord命名空间下

③ 建立后可操作与活动记录类同名的表也可以使用静态tableName方法返回表名

 

十七 、单表查询

 

 

十八 、单表删除

 

 

十九 、单标添加数据

 

Tset活动记录类编写rules方法

 

二十 、单表修改数据

 

 

二十一 、关联查询

首先,新建两个表的数据模型,即活动记录;

一对多关系关联(例如,根据顾客名字查询订单):

还可以使用::className()替换到完整类名

为了提高性能减少ControllerModel的耦合可以将上述方封装到Model

在控制器中调用方法或者属性即可

使用属性调用时需将Model中的方法最后的->all()去掉,因为当调用一个不存在属性时,会默认调用__Get()魔术方法,YII框架在这个魔术方法中为我们自动调用了->all()

 

 

一对一关系关联(例如,根据订单中的顾客ID查询顾客姓名):

Model中编写方法

 

控制器中调用

使用方法调用需补齐->one();

使用属性调用,会自动补齐

 

二十二 、关联查询性能

关联结果缓存:

 

解释第一次调用方法读取数据会自动执行SQL语句以后再调用就会自动缓存结果不会再执行SQL,可以使用unset()函数让执行时继续重新调用最新数据

 

关联多次查询

解释上述代码会执行一次循环便执行一遍SQL,最后查询N多次

 

解释改写后执行第一行代码相当于执行两条SQL语句在循环时不会再执行SQL,性能可以大大的优化

 

 

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
版权声明:本文版权归杰瑞教育技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:JRedu技术交流
posted @ 2017-10-31 16:07  杰瑞教育  阅读(8358)  评论(4编辑  收藏