- 浏览: 331607 次
- 性别:
- 来自: 北京
博客专栏
-
高性能PHP框架Yii分析...
浏览量:83979
文章分类
最新评论
-
huxiaoyunhust:
价值观这种东西,说不好听是口号,其实是公司每天潜移默化的感染, ...
关于企业价值观的一点点感悟 -
silentime:
stef831018 写道你想多了,企业价值观就两个字:利益怎 ...
关于企业价值观的一点点感悟 -
stef831018:
你想多了,企业价值观就两个字:利益
关于企业价值观的一点点感悟 -
guoyuqiangf8:
关于企业价值观的一点点感悟 -
silentime:
mangguo 写道推荐大家去看看我写的python入门,可以 ...
python如何打印变量的类型
以下分析基于Yii v1.0.6
Yii_PATH表示framework的路径
通常使用Yii框架的index.php程序如下:
// change the following paths if necessary $yii = dirname(__FILE__).'/protected/lib/Yii/framework/yii.php'; $config = dirname(__FILE__).'/protected/config/main.php'; // remove the following line when in production mode defined('YII_DEBUG') or define('YII_DEBUG',true); require_once $yii; $app = Yii::CreateWebApplication($config); $app->run();
我们来看一下Yii::CreateWebApplication的过程:
Yii其实是YiiBase的helper,因此我们实际查看的是YiiBase::CreateWebApplication
Yii_PATH/YiiBase.php:
class YiiBase { …… public static function createWebApplication($config=null) { return new CWebApplication($config); } …… //自动类加载函数 public static function autoload($className) { // use include so that the error PHP file may appear if(isset(self::$_coreClasses[$className])) include(YII_PATH.self::$_coreClasses[$className]); else if(isset(self::$_classes[$className])) include(self::$_classes[$className]); else { include($className.'.php'); return class_exists($className,false) || interface_exists($className,false); } return true; } …… //核心类列表 private static $_coreClasses=array( 'CApplication' => '/base/CApplication.php', 'CApplicationComponent' => '/base/CApplicationComponent.php', 'CBehavior' => '/base/CBehavior.php', …… ); } //注册自动类加载函数 spl_autoload_register(array('YiiBase','autoload')); require(YII_PATH.'/base/interfaces.php');
这里返回的是一个CWebApplication的对象,
Yii_PATH/web/CWebApplication.php
class CWebApplication extends CApplication { …… }
CWebApplication继承自CApplication,没有自定义的constructor,因此我们继续查看CApplication的constructor:
Yii_PATH/base/CApplication.php
abstract class CApplication extends CModule { …… public function __construct($config=null) { Yii::setApplication($this); // set basePath at early as possible to avoid trouble if(is_string($config)) $config=require($config); if(isset($config['basePath'])) { $this->setBasePath($config['basePath']); unset($config['basePath']); } else $this->setBasePath('protected'); Yii::setPathOfAlias('application',$this->getBasePath()); Yii::setPathOfAlias('webroot',dirname($_SERVER['SCRIPT_FILENAME'])); $this->preinit(); $this->initSystemHandlers(); $this->registerCoreComponents(); $this->configure($config); $this->attachBehaviors($this->behaviors); $this->preloadComponents(); $this->init(); } …… }
这里,做了很多工作,我们来慢慢分析:
Yii::setApplication($this);
对应代码如下:
public static function setApplication($app) { if(self::$_app===null || $app===null) self::$_app=$app; else throw new CException(Yii::t('yii','Yii application can only be created once.')); }
这里只是set一下application的名称,ok,继续:
if(is_string($config)) $config=require($config); if(isset($config['basePath'])) { $this->setBasePath($config['basePath']); unset($config['basePath']); } else $this->setBasePath('protected');
这里主要是将createWebApplication时穿过来的配置文件require了一下,然后拿到配置项中的basePath,设置成员变量:
public function setBasePath($path) { if(($this->_basePath=realpath($path))===false || !is_dir($this->_basePath)) throw new CException(Yii::t('yii','Application base path "{path}" is not a valid directory.', array('{path}'=>$path))); }
之后:
Yii::setPathOfAlias('application',$this->getBasePath()); Yii::setPathOfAlias('webroot',dirname($_SERVER['SCRIPT_FILENAME']));
通过下面的函数设置路径的别名:
public static function setPathOfAlias($alias,$path) { if(empty($path)) unset(self::$_aliases[$alias]); else self::$_aliases[$alias]=rtrim($path,'\\/'); }
保存在$_aliases数组中,接下来是一些初始化的工作(未完待续):
$this->preinit();
调用的是Yii_PATH/base/CModule.php中的一个空函数,用于初始化模块(子类覆盖)
protected function preinit(){ }
接下篇: Yii分析1:web程序入口(2)
评论
2 楼
silentime
2012-09-20
浮若尘 写道
写的太好了,很适合我们这些刚入门的新手看!!谢谢问一句您干编程多长时间了
算实习的话5年了
1 楼
浮若尘
2012-09-15
写的太好了,很适合我们这些刚入门的新手看!!谢谢问一句您干编程多长时间了
发表评论
-
[转]PHP的内存管理
2015-05-11 22:03 835原文出处:http://blogread.cn/it/ar ... -
《高性能PHP应用开发》读书笔记
2014-12-24 09:20 760注:只记录了一些关键点,部分知识点/内容请看到的朋友 ... -
HTTP API Design Guide(HTTP API接口设计指南)
2014-09-09 18:27 3455原文在这里:https://github.com/inte ... -
IE系列不支持圆角等CSS3属性的解决方案
2013-07-23 23:38 1231IE系列浏览器不支持CSS的圆角(border-radius ... -
[转]HTTP缓存算法
2013-01-04 14:34 1259原文地址:http://www.p ... -
【转】漫谈社区PHP 业务开发
2012-11-19 10:07 1072原文地址:http://stblog.baidu-tech.c ... -
【转】javascript中的urlencode
2012-09-20 23:04 1111原文地址:http://www.cnblo ... -
Yii分析13:Yii核心组件之AssetManager
2012-04-10 00:37 4343我们通过使用来讲解CAssetManager的使用和工 ... -
Yii分析12:Yii核心web组件之会话类CHttpSession
2012-03-06 09:44 3195CHttpSession提供session级的数据管理和配置 ... -
Yii分析11:Yii核心组件之错误处理类CErrorHandler
2012-02-24 09:57 4043类如其名,CErrorHandler在Yii中主要的功能 ... -
Yii分析10:Yii核心组件之数据库类CDbConnection
2012-02-17 09:18 8461数据库类几乎是每个PHP框架必不可少的组件之一,Yii的 ... -
Javascript面向对象之十装饰者模式-《javascript设计模式》笔记
2012-01-18 14:59 1435装饰者模式的含义是将要装饰的对象作为一个成员放在装饰者的内部, ... -
Javascript面向对象之九适配器模式-《javascript设计模式》笔记
2012-01-18 14:58 1220关于适配器模式的定义:适配器模式(有时候也称包装样式或者包装) ... -
Javascript面向对象之八门面模式-《javascript设计模式》笔记
2012-01-17 14:43 1287关于门面模式的定义:门面模式为了系统提供一个 统一的高层接口供 ... -
Javascript面向对象之七组合模式-《javascript设计模式》笔记
2012-01-17 14:42 1309关于组合模式的定义:组合模式(Composite Patter ... -
Javascript面向对象之五工厂模式-《javascript设计模式》笔记
2012-01-13 11:31 1165工厂模式和单例模式(http://blog.sina.com. ... -
Javascript面向对象之四链式调用-《javascript设计模式》笔记
2011-12-30 14:22 13361.链式调用:jquery可能是目前大家最常用到的js框架了, ... -
Javascript面向对象之三单例模式-《javascript设计模式》笔记
2011-12-30 14:21 12771.单例模式概述源自百 ... -
Javascript面向对象之二继承-《javascript设计模式》笔记
2011-12-29 10:49 11281.关于继承:百度百科对继承的解释是:继承是指一个对象直接使用 ... -
Javascript面向对象之一对象成员的定义-《javascript设计模式》笔记
2011-12-29 10:48 1644序: 刚接触javascript的时候,觉得这语言有点儿 ...
相关推荐
Yii 2和PHP Web应用程序开发
"The Yii Book: Developing Web Applications Using the Yii PHP Framework" written by Larry Ullman and published over the course of 2012 and 2013. This book, and the selling of it, is a bit of an ...
Yii2 Web应用程序 Yii2 Web应用程序是一个专用于yii2开发人员社区的入门项目,它具有满足快速创建应用程序需求和额外安全性的功能。该项目的建造: AdminLTE 3 Yii2最新版本 Bootstrap 4 成为开源集体贡献者:安装$ ...
Yii框架演示项目 [Yii Framework]是一个现代框架,旨在为您PHP应用程序奠定坚实的基础。 它旨在显示和测试所有Yii功能。 安装 您至少需要PHP 7.4。 克隆此存储库。 在项目根目录中运行composer update 。 运行./...
Yii护照 安装 :light_bulb: 这是展示如何安装软件包的好地方,请参见下文: 跑步 $ composer require inquid/yii-passport 用法 :light_bulb: 这是显示一些用法示例的好地方! 变更日志 请看看 。 贡献 请看看 。...
yii2.0基础和高级应用程序模板两个,不想使用composer安装yii2.0的,就直接下载这个用吧
该扩展还依赖于最新版本的 ElFinder 2.0-rc1(2012 年 4 月 10 日)。 如何安装: 将此添加到您的 composer.json require 部分 " philippfrenzel/yii2elfinder " : " dev-master " , 之后将以下功能添加到您的...
yii-simplepie yii-simplepie 是用于解析 rss 提要的 yii 扩展: 简单派: simplepie 文档: 用法 在 yii 中安装扩展 下载所有文件并放入 yii 扩展文件夹,然后在 config/main.php 中添加以下代码 'simplepie' ...
Yii2的基本应用程序模板 yii-basic-app-2.0.12
Yii-QA简介(此项目目前已不再维护)感谢选择Yii-QA,基于框架基础实现的问答程序。 #意识到目前的急性时间有限,无法管理太多的额外项目,我准备合并现有手上的项目,集成在一个项目中,感谢支持!!!!!!!请关注:...
Yii 1 流日志 将 Yii 1 日志发送到 stdout/stderr - 创建用于与提供的 php-fpm/nginx Docker 堆栈一起使用 感谢 Haensel 为! 安装 通过作曲家安装: composer require neam/yii-streamlog:* 或者下载扩展,将src...
用于与支付的 api 配合使用的 Yii 组件 安装 从这个 github 存储库下载 yii-robokassa: cd protected/components git clone ... 'sMerchantPass1' => 'pass1' , 'sMerchantPass2' => 'pass
Yii 2 Advanced Application Template 是一个骨架 Yii 2 应用程序,最适合开发具有多层的复杂 Web 应用程序。 模板包括三层:前端、后端和控制台,每一层都是一个独立的 Yii 应用程序。 该模板旨在在团队开发环境...
yii2sly 这个扩展是惊人的 jquery 滑块“sly”的包装器,可以在这里找到: 请。 仔细查看所有插件选项,可以通过将它们添加到“clientOptions”参数来传递这些选项,如下所示。 可以在此处找到扩展的演示: 安装 ...
yii2-swoole 为赋予 Yii2 框架协程异步能力而生。 后期开发会依赖 去实现功能,相信 Swoft 会是下一代优秀的框架。 此插件基于 swoole (v2.0) 底层实现的协程,改造 Yii2 的核心代码,使开发者无感知,以及在不改动...
yii-seo Yii PHP 框架的搜索引擎优化。 用法 布局中 <?php Yii::app()->controller->widget( 'vendor.crisu83.yii-seo.widgets.SeoHead', array( 'httpEquivs' => array( 'Content-Type' => 'text/html; ...
Yii 框架的 CKEditor 小部件 简单的 Yii CKEditor 小部件。 CKEditor - 每个人的 WYSIWYG 编辑器。 小部件生成具有相同属性的 CHtml::activeTextArea。 使用 CKEditor 4+ 版本测试。 安装 将此小部件复制到扩展...
Yii1LikeUrlRule 此组件使您可以像在yii1中一样使用yii2中的路由,例如site.com/controller/action/param1/valueOfParam1/param2/valueOfParam2
Yii 1.x 例子 全局组件配置示例: 'components' => [ 'fullcalendar' => [ 'class' => 'ext.yii-fullcalendar.FullCalendar' , 'options' => [ 'buttonText' => [ 'today' => 'Сегодня' , 'week' =>...
Yii 2 Advanced Project Template是最简单的应用程序,最适合开发具有多层的复杂Web应用程序。 该模板包括三层:前端,后端和控制台,每层都是一个单独的Yii应用程序。 该模板旨在在团队开发环境中工作。 它支持在...