Yii源码阅读笔记(三十二)
web/Application类的注释,继承base/Application类,针对web应用的一些处理:
namespace yii\web; use Yii; use yii\base\InvalidRouteException; /** * Application is the base class for all web application classes. * Application 是所有web应用的基类 * * @property string $homeUrl The homepage URL. * @property Session $session The session component. This property is read-only. * @property User $user The user component. This property is read-only. * * @author Qiang Xue <qiang.xue@gmail.com> * @since 2.0 */ class Application extends \yii\base\Application { /** * @var string the default route of this application. Defaults to 'site'. * @var string 默认的路由,默认值为‘site’. */ public $defaultRoute = 'site'; /** * @var array the configuration specifying a controller action which should handle * all user requests. This is mainly used when the application is in maintenance mode * and needs to handle all incoming requests via a single action. * @var array 配置项,指定一个控制器处理所有用户的请求,主要用于维护模式 * The configuration is an array whose first element specifies the route of the action. * The rest of the array elements (key-value pairs) specify the parameters to be bound * to the action. For example, * 配置项是一个第一个元素指定Action的路由,其余元素为参数的数组,例如: * * ```php * [ * 'offline/notice', * 'param1' => 'value1', * 'param2' => 'value2', * ] * ``` * * Defaults to null, meaning catch-all is not used. */ public $catchAll; /** * @var Controller the currently active controller instance * @var Controller 默认的控制器实例 */ public $controller; /** * @inheritdoc */ protected function bootstrap() { $request = $this->getRequest();//获取请求的组件 Yii::setAlias('@webroot', dirname($request->getScriptFile()));//设置webroot别名,该别名指向正在运行的应用的入口文件 index.php 所在的目录 Yii::setAlias('@web', $request->getBaseUrl());//定义别名web,指向当前应用的根URL,主要用于前端 parent::bootstrap();//调用父类方法,初始化应用组件 } /** * Handles the specified request. * 处理指定的请求 * @param Request $request the request to be handled * @return Response the resulting response * @throws NotFoundHttpException if the requested route is invalid */ public function handleRequest($request) { if (empty($this->catchAll)) { list ($route, $params) = $request->resolve();//取出路由及参数 } else { $route = $this->catchAll[0]; $params = $this->catchAll; unset($params[0]); } try { Yii::trace("Route requested: '$route'", __METHOD__); $this->requestedRoute = $route; $result = $this->runAction($route, $params);//运行控制器中的Acition if ($result instanceof Response) { return $result; } else { /** *这个是加载yii\base\Response类,在外部可以Yii::$app->get('response')、Yii::$app->getResponse()、Yii::$app->response 等等方式来加载response类 *主要用来加载http状态,及头信息,如301,302,404,ajax头等等的获取 */ $response = $this->getResponse(); if ($result !== null) { $response->data = $result; } return $response; } } catch (InvalidRouteException $e) { throw new NotFoundHttpException(Yii::t('yii', 'Page not found.'), $e->getCode(), $e); } } private $_homeUrl; /** * @return string the homepage URL * @return string 返回主页的URL */ public function getHomeUrl() { if ($this->_homeUrl === null) { if ($this->getUrlManager()->showScriptName) {//如果请求路径中显示入口脚本 return $this->getRequest()->getScriptUrl();//返回入口脚本的相对路径 } else { return $this->getRequest()->getBaseUrl() . '/';//否则返回BaseUrl,即去掉入口脚本名和结束斜线的路径 } } else { return $this->_homeUrl; } } /** * @param string $value the homepage URL * 设置主页URL */ public function setHomeUrl($value) { $this->_homeUrl = $value; } /** * Returns the session component. * 返回session组件对象 * @return Session the session component. */ public function getSession() { return $this->get('session'); } /** * Returns the user component. * 返回user组件对象 * @return User the user component. */ public function getUser() { return $this->get('user'); } /** * @inheritdoc * 定义核心组件,用于程序初始化时加载 */ public function coreComponents() { return array_merge(parent::coreComponents(), [ 'request' => ['class' => 'yii\web\Request'], 'response' => ['class' => 'yii\web\Response'], 'session' => ['class' => 'yii\web\Session'], 'user' => ['class' => 'yii\web\User'], 'errorHandler' => ['class' => 'yii\web\ErrorHandler'], ]); } }
Yii源码阅读笔记(三十二)的更多相关文章
- Yii源码阅读笔记(十二)
Action类,控制器中方法的基类: namespace yii\base; use Yii; /** * Action is the base class for all controller ac ...
- Yii源码阅读笔记(十八)
View中的查找视图文件方法和渲染文件方法 /** * Finds the view file based on the given view name. * 通过view文件名查找view文件 * ...
- Yii源码阅读笔记(十五)
Model类,集中整个应用的数据和业务逻辑——验证 /** * Returns the attribute labels. * 返回属性的标签 * * Attribute labels are mai ...
- Yii源码阅读笔记(十六)
Model类,集中整个应用的数据和业务逻辑—— /** * Generates a user friendly attribute label based on the give attribute ...
- Yii源码阅读笔记(十四)
Model类,集中整个应用的数据和业务逻辑——场景.属性和标签: /** * Returns a list of scenarios and the corresponding active attr ...
- Yii源码阅读笔记(十)
控制器类,所有控制器的基类,用于调用模型和布局,输出到视图 namespace yii\base; use Yii; /** * Controller is the base class for cl ...
- Yii源码阅读笔记(十九)
View中渲染view视图文件的前置和后置方法,以及渲染动态内容的方法: /** * @return string|boolean the view file currently being rend ...
- Yii源码阅读笔记(一)
今天开始阅读yii2的源码,想深入了解一下yii框架的工作原理,同时学习一下优秀的编码规范和风格.在此记录一下阅读中的小心得. 每个框架都有一个入口文件,首先从入口文件开始,yii2的入口文件位于we ...
- Werkzeug源码阅读笔记(三)
这次主要讲下werkzeug中的Local. 源码在werkzeug/local.py Thread Local 在Python中,状态是保存在对象中.Thread Local是一种特殊的对象,它是对 ...
随机推荐
- and or bool and a or b 原理解释
python 中的and从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值. or也是从左到有计算表达式,返回第一个为真的值. 代码如下: IDLE 1.2.4>&g ...
- 【ZJOI2008】 树的统计 count
Description 一 棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. ...
- SQL的ROW_NUMBER函数
with tabs as ( select ROW_NUMBER() over(partition by customerID order by totalPrice) as rows,custome ...
- ios cocopods 安装使用及高级教程
CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm.随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的 ...
- 使用Fiddler搭建手机调试环境(我做得项目是调试微信的公众号)
部分内容参考:http://ju.outofmemory.cn/entry/22854 我们在测试微信企业号的时候,由于微信的限制,不能把它拿到chrome浏览器中进行调试,所以就不能实时的看到页面变 ...
- Linux C编程学习之C语言简介---预处理、宏、文件包含……
C的简介 C语言的结构极其紧凑,C语言是一种模块化的编程语言,整个程序可以分割为几个相对独立的功能模块,模块之间的相互调用和数据传递是非常方便的 C语言的表达能力十分强大.C语言兼顾了高级语言和汇编语 ...
- 【CentOS】压缩打包
一.gzip [-d][-1-9][filename] -d 解压 -[1-9] 压缩等级(默认为6) zcat filename.gz 查看压缩文件 最小化安装centOS是没有安装bzip2的 ...
- CSS3动画里的过渡效果
过渡效果中有: 1平滑效果 2线性过渡 3由慢到快 4由快到慢 5慢-快-慢 等等 具体参考 w3chool 例如: <body> <div class="out&quo ...
- jQuery插件(选项卡)
使用选项卡插件可以将<ul>中的<li>选项定义为选项标题,在标题中,再使用<a>元素的“href”属性设置选项标题对应的内容,它的调用格式如下: $(select ...
- 【UE4游戏开发】安装UE4时报SU-PQR1603错误的解决方法
马三在开发过程中一直用的都是UE4.9版本(很久没有更新了.),因为功能都够用,所以也懒得去更新.这不最近UE4 发布了最新的4.14版本,本来想尝个鲜,试试新版的UE引擎怎么样,结果这一安装上就一直 ...