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源码阅读笔记(三十二)的更多相关文章

  1. Yii源码阅读笔记(十二)

    Action类,控制器中方法的基类: namespace yii\base; use Yii; /** * Action is the base class for all controller ac ...

  2. Yii源码阅读笔记(十八)

    View中的查找视图文件方法和渲染文件方法 /** * Finds the view file based on the given view name. * 通过view文件名查找view文件 * ...

  3. Yii源码阅读笔记(十五)

    Model类,集中整个应用的数据和业务逻辑——验证 /** * Returns the attribute labels. * 返回属性的标签 * * Attribute labels are mai ...

  4. Yii源码阅读笔记(十六)

    Model类,集中整个应用的数据和业务逻辑—— /** * Generates a user friendly attribute label based on the give attribute ...

  5. Yii源码阅读笔记(十四)

    Model类,集中整个应用的数据和业务逻辑——场景.属性和标签: /** * Returns a list of scenarios and the corresponding active attr ...

  6. Yii源码阅读笔记(十)

    控制器类,所有控制器的基类,用于调用模型和布局,输出到视图 namespace yii\base; use Yii; /** * Controller is the base class for cl ...

  7. Yii源码阅读笔记(十九)

    View中渲染view视图文件的前置和后置方法,以及渲染动态内容的方法: /** * @return string|boolean the view file currently being rend ...

  8. Yii源码阅读笔记(一)

    今天开始阅读yii2的源码,想深入了解一下yii框架的工作原理,同时学习一下优秀的编码规范和风格.在此记录一下阅读中的小心得. 每个框架都有一个入口文件,首先从入口文件开始,yii2的入口文件位于we ...

  9. Werkzeug源码阅读笔记(三)

    这次主要讲下werkzeug中的Local. 源码在werkzeug/local.py Thread Local 在Python中,状态是保存在对象中.Thread Local是一种特殊的对象,它是对 ...

随机推荐

  1. ACM-ICPC代码模板

    是不是感觉手中的模板都各有缺陷? 要找到好的模板就要集百家之所长, 我在这里贡献出我的代码模板丰富大家的积累. 我的模板能较好的与常见的模板形成互补. 赶快收藏吧,否则以后找不到就不好啦! 另外,想成 ...

  2. Effective C++阅读笔记_条款2:尽量以const,enum,inline替换#define

    1.#define缺点1 #define NUM 1.2 记号NUM可能没有进入记号表,在调试或者错误信息中,无法知道1.2的含义. 改善:通过const int NUM = 1.2; 2.#dein ...

  3. 自己总结SVN必知点

    1.只有添加或删除文件,才与xcodeproj文件有关 2.本地新建文件,为未知文件,符号为问号?,添加文件先add为A文件后,再commit         3.删除文件为叹号,右键删除为D,删除本 ...

  4. xml引用实体dtd不能成功的问题

    你没有错,现在的浏览器都不怎么支持实体引用了,这是个无奈的现实.我记得上回试过,好像如果DTD不是单独的文件而是内置到XML里面的话,实体还可以显示的.你可以试一下 <?xml version= ...

  5. python入门一

    python类型 编程语言主要从以下几个角度为进行分类,编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言. 编译型和解释型 编译型:在程序执行之前,有一个单独的编译过程,将程序翻译成 ...

  6. LATTICE USB下载线接口说明

    这节知识摘抄于网络,仅用几张图片来显示,提醒Usb下载线的连接方式. 最后贴出个人使用的8线的USB下载器的连接方式: 再补充一点,应为彩色杜邦线与USB下载器是活口连接,两个可以分开,再连接的时候, ...

  7. win10取消vpn使用远程默认网关

    打开%AppData%\Microsoft\Network\Connections\Pbk,找到rasphone.pbk文件(当你新建拨号连接或者VPN连接之后会在这个目录创建一个.pbk的文件,这个 ...

  8. dedecms在列表或首页取得文章首图的功能改进

    在网上找过资料,效果不是很满意,第一个是原理说的不对,第二个是后缀写死. 原文大致如下: 当文章缩略图是自动选取文章内第一个图片裁减所得时 他的命名规则是有规律的 比如原文是1.jpg 它对应的缩略图 ...

  9. AngularJs表单验证

    常用的表单验证指令 1. 必填项验证 某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可: <input type="text" requir ...

  10. 【转】java-String中的 intern()

    转自:http://blog.sina.com.cn/s/blog_69dcd5ed0101171h.html 1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值 ...