zoukankan      html  css  js  c++  java
  • PHP开发框架之YII框架学习——碾压ThinkPHP不是梦(转载)

    一、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

    ②  控制器的类名与文件同名,必须放在命名空间中 appcontrollers

    ③  控制器必须继承Controller类,需要use yiiwebController

    ④  控制器中必须包含操作方法,操作需用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文件修改数据块配置,访问路径如果是127.0.0.则mysql:host=127.0.0.1;如果是location就写为:location

     

    注:在设置后,如果访问数据库报错:could not found drive

    这个问题是你的php没有打开pdo权限,在php文件夹下中的php.ini下打开extension=php_pdo_mysql.dll

     

    十六 、活动记录

    在models文件夹下,建立数据模型

    ①  活动记录文件必须在命名空间appmodels下;

    ②  必须继承ActiveRecord类,在YIIdbActiveRecord命名空间下;

    ③ 建立后,可操作与活动记录类同名的表,也可以使用静态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/p/7762046.html

  • 相关阅读:
    ZK节点介绍和基本操作
    zooker集群容器搭建
    Redisson 整合Spring测试分布式锁
    Redis主从哨兵容器配置
    Redis分布式锁
    Redis调用Lua脚本并测试
    基于Docker的Mysql 主从架构搭建
    容器安装及使用基础
    ConcurrentHashMap源码解读
    原码反码补码
  • 原文地址:https://www.cnblogs.com/blog-zy/p/7776676.html
Copyright © 2011-2022 走看看