Module类中的辅助功能方法:

  1. /**
  2. * Returns an ID that uniquely identifies this module among all modules within the current application.
  3. * 返回模块的唯一标识
  4. * Note that if the module is an application, an empty string will be returned.
  5. * @return string the unique ID of the module.
  6. */
  7. public function getUniqueId()
  8. {
  9. //三元运算符,如果当前模块有父模块,则返回[父模块ID/当前模块ID]的格式作为唯一ID,否则只返回当前模块ID
  10. return $this->module ? ltrim($this->module->getUniqueId() . '/' . $this->id, '/') : $this->id;
  11. }
  12.  
  13. /**
  14. * Returns the root directory of the module.
  15. * 返回当前模块的根路径
  16. * It defaults to the directory containing the module class file.
  17. * @return string the root directory of the module.
  18. */
  19. public function getBasePath()
  20. {
  21. if ($this->_basePath === null) {
  22. $class = new \ReflectionClass($this);//生成当前类的反射对象
  23. $this->_basePath = dirname($class->getFileName());//getFileName()取得类定义的路径
  24. }
  25.  
  26. return $this->_basePath;
  27. }
  28.  
  29. /**
  30. * Sets the root directory of the module.
  31. * 设置当前模块的根路径
  32. * This method can only be invoked at the beginning of the constructor.
  33. * @param string $path the root directory of the module. This can be either a directory name or a path alias.
  34. * @throws InvalidParamException if the directory does not exist.
  35. */
  36. public function setBasePath($path)
  37. {
  38. $path = Yii::getAlias($path);
  39. $p = realpath($path);
  40. if ($p !== false && is_dir($p)) {
  41. $this->_basePath = $p;
  42. } else {
  43. throw new InvalidParamException("The directory does not exist: $path");
  44. }
  45. }
  46.  
  47. /**
  48. * Returns the directory that contains the controller classes according to [[controllerNamespace]].
  49. * 根据控制器的命名空间返回控制器的目录路径
  50. * Note that in order for this method to return a value, you must define
  51. * an alias for the root namespace of [[controllerNamespace]].
  52. * 为了使该方法返回正确的值,必须为[[controllerNamespace]]定义一个根别名
  53. * @return string the directory that contains the controller classes.
  54. * @throws InvalidParamException if there is no alias defined for the root namespace of [[controllerNamespace]].
  55. */
  56. public function getControllerPath()
  57. {
  58. //通过将命名空间转换为路径构造别名路径,然后通过getAlias方法取得控制器的绝对路径
  59. return Yii::getAlias('@' . str_replace('\\', '/', $this->controllerNamespace));
  60. }
  61.  
  62. /**
  63. * Returns the directory that contains the view files for this module.
  64. * 取得当前模块的视图文件目录路径
  65. * @return string the root directory of view files. Defaults to "[[basePath]]/views".
  66. */
  67. public function getViewPath()
  68. {
  69. if ($this->_viewPath === null) {
  70. $this->_viewPath = $this->getBasePath() . DIRECTORY_SEPARATOR . 'views';//getBasePath()返回当前模块的根路径,然后拼接出视图文件路径
  71. }
  72. return $this->_viewPath;
  73. }
  74.  
  75. /**
  76. * Sets the directory that contains the view files.
  77. * 设置视图文件目录路径
  78. * @param string $path the root directory of view files.
  79. * @throws InvalidParamException if the directory is invalid
  80. */
  81. public function setViewPath($path)
  82. {
  83. $this->_viewPath = Yii::getAlias($path);
  84. }
  85.  
  86. /**
  87. * Returns the directory that contains layout view files for this module.
  88. * 取得当前模块的布局文件路径
  89. * @return string the root directory of layout files. Defaults to "[[viewPath]]/layouts".
  90. */
  91. public function getLayoutPath()
  92. {
  93. if ($this->_layoutPath === null) {
  94. $this->_layoutPath = $this->getViewPath() . DIRECTORY_SEPARATOR . 'layouts';//getBasePath()返回当前模块的根路径,然后拼接出布局文件目录路径
  95. }
  96.  
  97. return $this->_layoutPath;
  98. }
  99.  
  100. /**
  101. * Sets the directory that contains the layout files.
  102. * 设置当前模块的布局文件路径
  103. * @param string $path the root directory or path alias of layout files.
  104. * @throws InvalidParamException if the directory is invalid
  105. */
  106. public function setLayoutPath($path)
  107. {
  108. $this->_layoutPath = Yii::getAlias($path);
  109. }
  110.  
  111. /**
  112. * Defines path aliases.
  113. * 定义路径别名
  114. * This method calls [[Yii::setAlias()]] to register the path aliases.
  115. * This method is provided so that you can define path aliases when configuring a module.
  116. * 通过调用[[Yii::setAlias()]]注册路径别名,方便在配置模块的时候定义路径别名
  117. * @property array list of path aliases to be defined. The array keys are alias names
  118. * (must start with '@') and the array values are the corresponding paths or aliases.
  119. * See [[setAliases()]] for an example.
  120. * @param array $aliases list of path aliases to be defined. The array keys are alias names
  121. * (must start with '@') and the array values are the corresponding paths or aliases.
  122. * For example,
  123. * 传入测参数的格式,键名为别名名称,以@开始,键值为对应的路径
  124. * ```php
  125. * [
  126. * '@models' => '@app/models', // an existing alias
  127. * '@backend' => __DIR__ . '/../backend', // a directory
  128. * ]
  129. * ```
  130. */
  131. public function setAliases($aliases)
  132. {
  133. foreach ($aliases as $name => $alias) {
  134. Yii::setAlias($name, $alias);//调用[[Yii::setAlias()]]注册路径别名
  135. }
  136. }
  137.  
  138. /**
  139. * Checks whether the child module of the specified ID exists.
  140. * This method supports checking the existence of both child and grand child modules.
  141. * @param string $id module ID. For grand child modules, use ID path relative to this module (e.g. `admin/content`).
  142. * @return boolean whether the named module exists. Both loaded and unloaded modules
  143. * are considered.
  144. */
  145. public function hasModule($id)
  146. {
  147. if (($pos = strpos($id, '/')) !== false) {//如果模块ID格式为 `admin/content`
  148. // sub-module
  149. $module = $this->getModule(substr($id, 0, $pos));//取出当前模块的子模块
  150.  
  151. return $module === null ? false : $module->hasModule(substr($id, $pos + 1));//如果没有取到,返回false,否则判断子模块的子模块
  152. } else {//模块ID没有父模块的情况,直接判断_modules数组中是否有值
  153. return isset($this->_modules[$id]);
  154. }
  155. }

Yii源码阅读笔记(二十三)的更多相关文章

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

    Model类,集中整个应用的数据和业务逻辑: namespace yii\base; use Yii; use ArrayAccess; use ArrayObject; use ArrayItera ...

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

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

  3. werkzeug源码阅读笔记(二) 下

    wsgi.py----第二部分 pop_path_info()函数 先测试一下这个函数的作用: >>> from werkzeug.wsgi import pop_path_info ...

  4. werkzeug源码阅读笔记(二) 上

    因为第一部分是关于初始化的部分的,我就没有发布出来~ wsgi.py----第一部分 在分析这个模块之前, 需要了解一下WSGI, 大致了解了之后再继续~ get_current_url()函数 很明 ...

  5. Detectron2源码阅读笔记-(二)Registry&build_*方法

    ​ Trainer解析 我们继续Detectron2代码阅读笔记-(一)中的内容. 上图画出了detectron2文件夹中的三个子文件夹(tools,config,engine)之间的关系.那么剩下的 ...

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

    接下来阅读BaseYii.php vendor/yiisoft/yii2/BaseYii.php—— namespace yii; use yii\base\InvalidConfigExceptio ...

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

    ServiceLocator,服务定位类,用于yii2中的依赖注入,通过以ID为索引的方式缓存服务或则组件的实例来定位服务或者组件: namespace yii\di; use Yii; use Cl ...

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

    web/Application类的注释,继承base/Application类,针对web应用的一些处理: namespace yii\web; use Yii; use yii\base\Inval ...

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

    动态模型DynamicModel类,用于实现模型内数据验证: namespace yii\base; use yii\validators\Validator; /** * DynamicModel ...

随机推荐

  1. Django学习笔记之一

    一.Windows下安装 Django 1.下载安装包解压后放到本地目录如C:\Django-1.7.2 官网地址:https://www.djangoproject.com/download/ 2. ...

  2. HTML图片元素(标记)

    <html> <head> <title>第一个网页</title> </head> <body> ************** ...

  3. URAL1996 Cipher Message 3(KMP + FFT)

    题目 Source http://acm.timus.ru/problem.aspx?space=1&num=1996 Description Emperor Palpatine has be ...

  4. soapui中文操作手册(三)----使用SoapUI进行负载测试

    使用了SoapUI进行负载测试 负载测试是相当独特的,我们已经创建了一个功能,使您能够快速创建性能测试,并很容易地修改它们.SoapUI性能测试通常是从现有功能测试创建.这使您可以非常快速地创建先进的 ...

  5. BZOJ4382 : [POI2015]Podział naszyjnika

    对于每种颜色,可以发现可以切的位置被分割成了若干段独立的区域. 给每个区域一个编号,将$m$种颜色的情况当成字符串来看,如果两个切口的字符串完全匹配,那么可以在这里切两刀. 可以构造hash函数,通过 ...

  6. word多级编号,如何让第一级为大写“一”,其他级别均为小写1.

    自定义里面设置了第一级为大写,2级.3级首字跟着变为大写,是因为2.3级没有勾选"正规形式编号",如图:

  7. curl/wget 测试http请求的响应头信息

    1. wget –debug wget可以使用debug信息来查看信息头,如下: [root@localhost ~]# wget --debug http://192.168.1.101:8080/ ...

  8. 【BZOJ】1132: [POI2008]Tro

    题意 给\(n(1 \le n \le 3000)\)个点,求所有三角形的面积和. 分析 首先枚举一个点,发现把其它点按照关于这个点的极角排序后第\(i\)个点关于前面\(1\)到\(i-1\)的点组 ...

  9. C语言与水仙花数

    C语言与水仙花数 水仙花数:前提三位数,"个位数的立方"加上"十位数的立方"加上"百位数的立方"恰好等于这个数. 我们来用C语言书写水仙花数 ...

  10. jquery dialog open后,服务器端控件失效的快速解决方法

    jquery dialog为我们提供了非常漂亮实用的对话框,比单调的alert.confirm.prompt好用很多. 在使用jquery与.net共同开发时,直接调用jquery dialog的op ...