学习yii2.0框架阅读代码(十八)

vendor/yiisoft/yii2/base/Module. php

    /**
     * 返回一个ID,惟一标识此模块在所有模块在当前应用程序.
     * @return string the unique ID of the module.
     */
    public function getUniqueId()
    {   //如果该模块是一个应用程序,将返回一个空字符串.
        return $this->module ? ltrim($this->module->getUniqueId() . ‘/‘ . $this->id, ‘/‘) : $this->id;
    }

    /**
     * Returns the root directory of the module.
     * It defaults to the directory containing the module class file.
     * @return string the root directory of the module.
     */
    public function getBasePath()
    {   //返回模块的根目录
        if ($this->_basePath === null) {
            $class = new \ReflectionClass($this);
            $this->_basePath = dirname($class->getFileName());
        }

        return $this->_basePath;
    }

    /**
     * 设置模块的根目录.
     * 这种方法只能在开始调用构造函数的使用
     * @param string $path the root directory of the module. This can be either a directory name or a path alias.
     * @throws InvalidParamException if the directory does not exist.
     */
    public function setBasePath($path)
    {
        $path = Yii::getAlias($path);
        // realpath — 返回规范化的绝对路径名
        $p = realpath($path);
        if ($p !== false && is_dir($p)) {
            // 路径存在,且是一个目录,就将它存到当前对象的$_basePath中
            $this->_basePath = $p;
        } else {
            throw new InvalidParamException("The directory does not exist: $path");
        }
    }

    /**
     * 返回目录包含控制器类根据[[controllerNamespace]]
     * @return string the directory that contains the controller classes.
     * @throws InvalidParamException if there is no alias defined for the root namespace of [[controllerNamespace]].
     */
    public function getControllerPath()
    {   //如果没有别名为的根名称空间就返回定义[[controllerNamespace]]。
        return Yii::getAlias(‘@‘ . str_replace(‘\\‘, ‘/‘, $this->controllerNamespace));
    }

    /**
     * 集包含视图的目录文件.
     * @param string $path the root directory of view files.
     * @throws InvalidParamException if the directory is invalid
     */
    public function setViewPath($path)
    {
        $this->_viewPath = Yii::getAlias($path);
    }

    /**
     * 定义了路径别名.
     * 这个方法调用[[Yii:setAlias()]]注册路径别名.
     * 这种方法提供,这样您就可以定义路径别名配置模块.
     * @property array list of path aliases to be defined. The array keys are alias names
     * (must start with ‘@‘) and the array values are the corresponding paths or aliases.
     * See [[setAliases()]] for an example.
     * @param array $aliases list of path aliases to be defined. The array keys are alias names
     * (must start with ‘@‘) and the array values are the corresponding paths or aliases.
     * For example,
     *
     * ~~~
     * [
     *     ‘@models‘ => ‘@app/models‘, // an existing alias
     *     ‘@backend‘ => __DIR__ . ‘/../backend‘,  // a directory
     * ]
     * ~~~
     */
    public function setAliases($aliases)
    {
        foreach ($aliases as $name => $alias) {
            Yii::setAlias($name, $alias);
        }
    }

    /**
     * Checks whether the child module of the specified ID exists.
     * This method supports checking the existence of both child and grand child modules.
     * @param string $id module ID. For grand child modules, use ID path relative to this module (e.g. `admin/content`).
     * @return boolean whether the named module exists. Both loaded and unloaded modules
     * are considered.
     */
    public function hasModule($id)
    {
        if (($pos = strpos($id, ‘/‘)) !== false) {
            // 检查是否指定的子模块ID存在
            $module = $this->getModule(substr($id, 0, $pos));

            return $module === null ? false : $module->hasModule(substr($id, $pos + 1));
        } else {
            return isset($this->_modules[$id]);
        }
    }
时间: 2024-10-07 17:42:48

学习yii2.0框架阅读代码(十八)的相关文章

学习yii2.0框架阅读代码(十五)

行为是 yii\base\Behavior 或其子类的实例.行为,也称为mixins,可以无须改变类继承关系即可增强一个已有的 yii\base\Component 类功能.当行为附加到组件后,它将“注入”它的方法和属性到组件,然后可以像访问组件内定义的方法和属性一样访问它们.此外,行为通过组件能响应被触发的事件,从而自定义或调整组件正常执行的代码. <?php namespace yii\base; /** * 行为是所有行为类的基类. * * 一个行为可以用来增强现有的功能组件,无需修改其代

学习yii2.0框架阅读代码(十九)

vendor/yiisoft/yii2/base/Module. php(续) /** * 检索指定的子模块ID. * 这种方法支持检索两个子模块和子模块. * @param string $id module ID (case-sensitive). To retrieve grand child modules, * use ID path relative to this module (e.g. `admin/content`). * @param boolean $load wheth

学习yii2.0框架阅读代码(十)

vendor/yiisoft/yii2/base/Module. <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */ namespace yii\base; use Yii; use yii\di\ServiceLocator; /** * 模块和应用程序类

学习yii2.0框架阅读代码(十二)

先把Object.Component.Module三个核心搞清楚了在写实例 下面介绍一下Object -- Yii最基础的类,大多数类都继承了该类.常用的12个公共方法,有点类似于ThinkPHP里面的魔术方法. <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/

学习yii2.0框架阅读代码(十六)

yii\base\InlineAction 追踪一个命令行请求的过程 namespace yii\base; use Yii; /** * InlineAction表示一个动作被定义为一个控制器的方法. * * The name of the controller method is available via [[actionMethod]] which * is set by the [[controller]] who creates this action. * * @author Qi

学习yii2.0框架阅读代码(十四)

组件(Component) 事件Event(温习) <?php namespace yii\base; //事件是所有事件类的基类.它封装了参数与事件相关联. //如果一个事件处理程序集[[进行]]是真的,其余的,uninvoked处理程序将不再被称为处理事件. //另外,添加一个事件处理程序时,额外的数据可能被传递和可以通过[[数据]]属性调用事件处理程序时. class Event extends Object { /** * @var string the event name. This

学习yii2.0框架阅读代码(二十)

vendor/yiisoft/yii2/base/Module. php(续) /** * 新建一个控制器实例基于给定的路线. * * 路线应该是相对于这个模块.该方法实现了以下算法 * to resolve the given route: * * 1. If the route is empty, use [[defaultRoute]]; * 2. If the first segment of the route is a valid module ID as declared in [

学习yii2.0框架阅读代码(八)

vendor/yiisoft/yii2/base/Model.php(续 /** * 设置属性值 * @param array $values attribute values (name => value) to be assigned to the model. * @param boolean $safeOnly whether the assignments should only be done to the safe attributes. * 一个安全属性是与一个验证规则在当前的[

学习yii2.0框架阅读代码(四)

阅读 BaseYii Yii的辅助类核心框架 别名相关(续) //用一个真实的路径注册一个别名 public static function setAlias($alias, $path) { if (strncmp($alias, '@', 1)) { // 如果不是以 @ 开头,就将 @ 拼到开头 $alias = '@' . $alias; } // 获取 / 在 $alias 中首次出现的位置 $pos = strpos($alias, '/'); // 如果 / 不存在,$root 就