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 }
时间: 2024-10-08 10:17:02