1 关注者

类 yii\BaseYii

继承yii\BaseYii
子类Yii
自版本可用2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/BaseYii.php

BaseYii 是 Yii 框架的核心辅助类。

不要直接使用 BaseYii。相反,使用它的子类 Yii,您可以替换它以自定义 BaseYii 的方法。

公共属性

隐藏继承的属性

属性 类型 描述 定义
$aliases array 注册的路径别名 yii\BaseYii
$app yii\console\Application|yii\web\Application 应用程序实例 yii\BaseYii
$classMap array Yii 自动加载机制使用的类映射。 yii\BaseYii
$container yii\di\Container createObject() 使用的依赖注入 (DI) 容器。 yii\BaseYii

公共方法

隐藏继承的方法

方法 描述 定义
autoload() 类自动加载加载器。 yii\BaseYii
beginProfile() 标记用于分析的代码块的开始。 yii\BaseYii
configure() 使用初始属性值配置对象。 yii\BaseYii
createObject() 使用给定的配置创建新对象。 yii\BaseYii
debug() 记录调试消息。 yii\BaseYii
endProfile() 标记用于分析的代码块的结束。 yii\BaseYii
error() 记录错误消息。 yii\BaseYii
getAlias() 将路径别名转换为实际路径。 yii\BaseYii
getLogger() yii\BaseYii
getObjectVars() 返回对象的公共成员变量。 yii\BaseYii
getRootAlias() 返回给定别名的根别名部分。 yii\BaseYii
getVersion() 返回表示当前 Yii 框架版本的字符串。 yii\BaseYii
info() 记录信息性消息。 yii\BaseYii
powered() 返回一个 HTML 超链接,可以显示在您的网页上,显示“由 Yii 框架提供支持”信息。 yii\BaseYii
setAlias() 注册路径别名。 yii\BaseYii
setLogger() 设置日志记录器对象。 yii\BaseYii
t() 将消息翻译成指定的语言。 yii\BaseYii
trace() debug() 的别名。 yii\BaseYii
warning() 记录警告消息。 yii\BaseYii

属性详情

隐藏继承的属性

$aliases 公共静态属性

注册的路径别名

参见

public static array $aliases = [
    
'@yii' => __DIR__,
]
$app 公共静态属性

应用程序实例

$classMap 公共静态属性

Yii 自动加载机制使用的类映射。数组键是类名(不带前导反斜杠),数组值是相应的类文件路径(或 路径别名)。此属性主要影响 autoload() 的工作方式。

参见 autoload()

public static array $classMap = []
$container 公共静态属性

createObject() 使用的依赖注入 (DI) 容器。您可以使用 yii\di\Container::set() 来设置类及其初始属性值的必要依赖项。

参见

public static yii\di\Container $container null

方法详情

隐藏继承的方法

autoload() 公共静态方法

类自动加载加载器。

当 PHP 看到一个未知类时,此方法会自动调用。该方法将尝试根据以下步骤包含类文件

  1. $classMap 中搜索;
  2. 如果类是命名空间的(例如 yii\base\Component),它将尝试包含与相应路径别名关联的文件(例如 @yii/base/Component.php);

此自动加载器允许加载遵循 PSR-4 标准 并且其顶级命名空间或子命名空间定义为路径别名的类。

示例:当别名 @yii@yii/bootstrap 被定义时,yii\bootstrap 命名空间中的类将使用 @yii/bootstrap 别名加载,该别名指向 bootstrap 扩展文件安装的目录,并且所有来自其他 yii 命名空间的类将从 yii 框架目录加载。

另外,请参阅有关自动加载的 指南部分

public static void autoload ( $className )
$className string

不带前导反斜杠“\”的完全限定类名

抛出 yii\base\UnknownClassException

如果类在类文件中不存在

                public static function autoload($className)
{
    if (isset(static::$classMap[$className])) {
        $classFile = static::$classMap[$className];
        if (strncmp($classFile, '@', 1) === 0) {
            $classFile = static::getAlias($classFile);
        }
    } elseif (strpos($className, '\\') !== false) {
        $classFile = static::getAlias('@' . str_replace('\\', '/', $className) . '.php', false);
        if ($classFile === false || !is_file($classFile)) {
            return;
        }
    } else {
        return;
    }
    include $classFile;
    if (YII_DEBUG && !class_exists($className, false) && !interface_exists($className, false) && !trait_exists($className, false)) {
        throw new UnknownClassException("Unable to find '$className' in file: $classFile. Namespace missing?");
    }
}

            
beginProfile() 公共静态方法

标记用于分析的代码块的开始。

这必须与对 endProfile() 的调用相匹配,该调用具有相同的类别名称。 begin 和 end 调用也必须正确嵌套。例如,

\Yii::beginProfile('block1');
// some code to be profiled
    \Yii::beginProfile('block2');
    // some other code to be profiled
    \Yii::endProfile('block2');
\Yii::endProfile('block1');

另请参见 endProfile()

public static void beginProfile ( $token, $category 'application' )
$token string

代码块的令牌

$category string

此日志消息的类别

                public static function beginProfile($token, $category = 'application')
{
    static::getLogger()->log($token, Logger::LEVEL_PROFILE_BEGIN, $category);
}

            
configure() 公共静态方法

使用初始属性值配置对象。

public static object configure ( $object, $properties )
$object 对象

要配置的对象

$properties array

以名称-值对形式给出的属性初始值。

返回 对象

对象本身

                public static function configure($object, $properties)
{
    foreach ($properties as $name => $value) {
        $object->$name = $value;
    }
    return $object;
}

            
createObject() 公共静态方法

使用给定的配置创建新对象。

您可以将此方法视为 new 运算符的增强版本。该方法支持根据类名、配置数组或匿名函数创建对象。

以下是一些使用示例

// create an object using a class name
$object = Yii::createObject('yii\db\Connection');

// create an object using a configuration array
$object = Yii::createObject([
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
]);

// create an object with two constructor parameters
$object = \Yii::createObject('MyClass', [$param1, $param2]);

使用 依赖注入容器,此方法还可以识别依赖对象,实例化它们并将它们注入到新创建的对象中。

另请参见 yii\di\Container

public static object createObject ( $type, array $params = [] )
$type string|array|callable

对象类型。可以以下列形式之一指定:

  • 字符串:表示要创建的对象的类名
  • 配置数组:该数组必须包含一个 class 元素,该元素被视为对象类,其余的名称-值对将用于初始化相应的对象属性
  • PHP 可调用对象:匿名函数或表示类方法的数组 ([$class or $object, $method])。可调用对象应返回正在创建的对象的新实例。
$params array

构造函数参数

返回 对象

创建的对象

抛出 yii\base\InvalidConfigException

如果配置无效。

                public static function createObject($type, array $params = [])
{
    if (is_string($type)) {
        return static::$container->get($type, $params);
    }
    if (is_callable($type, true)) {
        return static::$container->invoke($type, $params);
    }
    if (!is_array($type)) {
        throw new InvalidConfigException('Unsupported configuration type: ' . gettype($type));
    }
    if (isset($type['__class'])) {
        $class = $type['__class'];
        unset($type['__class'], $type['class']);
        return static::$container->get($class, $params, $type);
    }
    if (isset($type['class'])) {
        $class = $type['class'];
        unset($type['class']);
        return static::$container->get($class, $params, $type);
    }
    throw new InvalidConfigException('Object configuration must be an array containing a "class" or "__class" element.');
}

            
debug() 公共静态方法 (从版本 2.0.14 开始可用)

记录调试消息。

跟踪消息主要用于开发目的,以查看某些代码的执行工作流程。此方法仅在应用程序处于调试模式时才记录消息。

public static void debug ( $message, $category 'application' )
$message string|array

要记录的消息。这可以是简单的字符串或更复杂的数据结构,例如数组。

$category string

消息的类别。

                public static function debug($message, $category = 'application')
{
    if (YII_DEBUG) {
        static::getLogger()->log($message, Logger::LEVEL_TRACE, $category);
    }
}

            
endProfile() 公共静态方法

标记用于分析的代码块的结束。

这必须与之前对 beginProfile() 的调用相匹配,该调用具有相同的类别名称。

另请参见 beginProfile()

public static void endProfile ( $token, $category 'application' )
$token string

代码块的令牌

$category string

此日志消息的类别

                public static function endProfile($token, $category = 'application')
{
    static::getLogger()->log($token, Logger::LEVEL_PROFILE_END, $category);
}

            
error() 公共静态方法

记录错误消息。

错误消息通常在应用程序执行期间发生不可恢复的错误时记录。

public static void error ( $message, $category 'application' )
$message string|array

要记录的消息。这可以是简单的字符串或更复杂的数据结构,例如数组。

$category string

消息的类别。

                public static function error($message, $category = 'application')
{
    static::getLogger()->log($message, Logger::LEVEL_ERROR, $category);
}

            
getAlias() 公共静态方法

将路径别名转换为实际路径。

翻译是根据以下步骤进行的

  1. 如果给定的别名不以“@”开头,则会原样返回;
  2. 否则,查找与给定别名开头部分匹配的最长已注册别名。如果它存在,则用相应的已注册路径替换给定别名的匹配部分。
  3. 根据 $throwException 参数抛出异常或返回 false。

例如,默认情况下,“@yii”被注册为 Yii 框架目录的别名,例如“/path/to/yii”。别名“@yii/web”将被转换为“/path/to/yii/web”。

如果您注册了两个别名“@foo”和“@foo/bar”。然后翻译“@foo/bar/config”将用相应的已注册路径替换“@foo/bar”(而不是“@foo”)。这是因为最长的别名优先。

但是,如果要翻译的别名为“@foo/barbar/config”,则将替换“@foo”而不是“@foo/bar”,因为“/”用作边界字符。

请注意,此方法不检查返回的路径是否存在。

有关更多信息,请参阅 关于别名的指南文章

另请参见 setAlias()

public static string|false getAlias ( $alias, $throwException true )
$alias string

要翻译的别名。

$throwException boolean

如果给定的别名无效,是否抛出异常。如果这是 false 并且给出了无效别名,则此方法将返回 false。

返回 string|false

与别名对应的路径,如果根别名未先前注册,则为 false。

抛出 yii\base\InvalidArgumentException

如果别名无效,而 $throwException 为 true。

                public static function getAlias($alias, $throwException = true)
{
    if (strncmp((string)$alias, '@', 1) !== 0) {
        // not an alias
        return $alias;
    }
    $pos = strpos($alias, '/');
    $root = $pos === false ? $alias : substr($alias, 0, $pos);
    if (isset(static::$aliases[$root])) {
        if (is_string(static::$aliases[$root])) {
            return $pos === false ? static::$aliases[$root] : static::$aliases[$root] . substr($alias, $pos);
        }
        foreach (static::$aliases[$root] as $name => $path) {
            if (strpos($alias . '/', $name . '/') === 0) {
                return $path . substr($alias, strlen($name));
            }
        }
    }
    if ($throwException) {
        throw new InvalidArgumentException("Invalid path alias: $alias");
    }
    return false;
}

            
getLogger() 公共静态方法

public static yii\log\Logger getLogger ( )
返回 yii\log\Logger

消息记录器

                public static function getLogger()
{
    if (self::$_logger !== null) {
        return self::$_logger;
    }
    return self::$_logger = static::createObject('yii\log\Logger');
}

            
getObjectVars() 公共静态方法

返回对象的公共成员变量。

提供此方法是为了让我们能够获取对象的公共成员变量。它不同于“get_object_vars()”,因为后者将在对象自身内部调用时返回私有和受保护的变量。

public static array getObjectVars ( $object )
$object 对象

要处理的对象

返回 array

对象的公共成员变量

                public static function getObjectVars($object)
{
    return get_object_vars($object);
}

            
getRootAlias() 公共静态方法

返回给定别名的根别名部分。

根别名是之前通过 setAlias() 注册的别名。如果给定的别名与多个根别名匹配,则将返回最长的那个。

public static 字符串|false getRootAlias ( $alias )
$alias string

别名

返回 string|false

根别名,如果未找到根别名则为 false

                public static function getRootAlias($alias)
{
    $pos = strpos($alias, '/');
    $root = $pos === false ? $alias : substr($alias, 0, $pos);
    if (isset(static::$aliases[$root])) {
        if (is_string(static::$aliases[$root])) {
            return $root;
        }
        foreach (static::$aliases[$root] as $name => $path) {
            if (strpos($alias . '/', $name . '/') === 0) {
                return $name;
            }
        }
    }
    return false;
}

            
getVersion() 公共静态方法

返回表示当前 Yii 框架版本的字符串。

public static 字符串 getVersion ( )
返回 string

Yii 框架的版本

                public static function getVersion()
{
    return '2.0.50-dev';
}

            
info() 公共静态方法

记录信息性消息。

应用程序通常会记录一条信息性消息,以记录重要的事件(例如管理员登录)。

public static void info ( $message, $category 'application' )
$message string|array

要记录的消息。这可以是简单的字符串或更复杂的数据结构,例如数组。

$category string

消息的类别。

                public static function info($message, $category = 'application')
{
    static::getLogger()->log($message, Logger::LEVEL_INFO, $category);
}

            
powered() 公共静态方法
自 2.0.14 版开始弃用,该方法将在 2.1.0 版中移除。

返回一个 HTML 超链接,可以显示在您的网页上,显示“由 Yii 框架提供支持”信息。

public static 字符串 powered ( )
返回 string

可以在网页上显示的 HTML 超链接,显示“由 Yii 框架提供支持”信息

                public static function powered()
{
    return \Yii::t('yii', 'Powered by {yii}', [
        'yii' => '<a href="https://yiiframework.cn/" rel="external">' . \Yii::t('yii', 'Yii Framework') . '</a>',
    ]);
}

            
setAlias() 公共静态方法

注册路径别名。

路径别名是代表长路径(文件路径、URL 等)的简短名称。例如,我们使用“@yii”作为 Yii 框架目录路径的别名。

路径别名必须以字符“@”开头,以便于将其与非别名路径区分开来。

请注意,此方法不会检查给定路径是否存在。它只做的是将别名与路径关联起来。

给定路径中的任何尾部“/”和“\”字符都将被修剪。

有关更多信息,请参阅 关于别名的指南文章

另请参阅 getAlias().

public static void setAlias ( $alias, $path )
$alias string

别名名称(例如“@yii”)。它必须以“@”字符开头。它可能包含正斜杠“/”,它用作通过 getAlias() 执行别名转换时的边界字符。

$path 字符串|null

与别名对应的路径。如果为 null,则将删除该别名。尾部“/”和“\”字符将被修剪。这可以是

  • 目录或文件路径(例如 /tmp/tmp/main.txt
  • URL(例如 https://yiiframework.cn
  • 路径别名(例如 @yii/base)。在这种情况下,路径别名将首先通过调用 getAlias() 转换为实际路径。
抛出 yii\base\InvalidArgumentException

如果 $path 是一个无效的别名。

                public static function setAlias($alias, $path)
{
    if (strncmp($alias, '@', 1)) {
        $alias = '@' . $alias;
    }
    $pos = strpos($alias, '/');
    $root = $pos === false ? $alias : substr($alias, 0, $pos);
    if ($path !== null) {
        $path = strncmp($path, '@', 1) ? rtrim($path, '\\/') : static::getAlias($path);
        if (!isset(static::$aliases[$root])) {
            if ($pos === false) {
                static::$aliases[$root] = $path;
            } else {
                static::$aliases[$root] = [$alias => $path];
            }
        } elseif (is_string(static::$aliases[$root])) {
            if ($pos === false) {
                static::$aliases[$root] = $path;
            } else {
                static::$aliases[$root] = [
                    $alias => $path,
                    $root => static::$aliases[$root],
                ];
            }
        } else {
            static::$aliases[$root][$alias] = $path;
            krsort(static::$aliases[$root]);
        }
    } elseif (isset(static::$aliases[$root])) {
        if (is_array(static::$aliases[$root])) {
            unset(static::$aliases[$root][$alias]);
        } elseif ($pos === false) {
            unset(static::$aliases[$root]);
        }
    }
}

            
setLogger() 公共静态方法

设置日志记录器对象。

public static void setLogger ( $logger )
$logger yii\log\Logger|null

日志记录器对象。

                public static function setLogger($logger)
{
    self::$_logger = $logger;
}

            
t() 公共静态方法

将消息翻译成指定的语言。

这是 yii\i18n\I18N::translate() 的快捷方法。

翻译将根据消息类别进行,并将使用目标语言。

您可以在翻译消息中添加参数,这些参数将在翻译后替换为相应的值。此格式是在参数名称周围使用大括号,如下面的示例所示

$username = 'Alexander';
echo \Yii::t('app', 'Hello, {username}!', ['username' => $username]);

使用 PHP intl 扩展 消息格式器支持对消息参数进行进一步的格式化。有关更多详细信息,请参阅 yii\i18n\I18N::translate()

public static 字符串 t ( $category, $message, $params = [], $language null )
$category string

消息类别。

$message string

要翻译的消息。

$params array

将用于替换消息中相应占位符的参数。

$language 字符串|null

语言代码(例如 en-USen)。如果为 null,将使用当前的 应用程序语言

返回 string

翻译后的消息。

                public static function t($category, $message, $params = [], $language = null)
{
    if (static::$app !== null) {
        return static::$app->getI18n()->translate($category, $message, $params, $language ?: static::$app->language);
    }
    $placeholders = [];
    foreach ((array) $params as $name => $value) {
        $placeholders['{' . $name . '}'] = $value;
    }
    return ($placeholders === []) ? $message : strtr($message, $placeholders);
}

            
trace() 公共静态方法
自 2.0.14 版开始弃用。请改用 debug()

debug() 的别名。

public static void trace ( $message, $category 'application' )
$message string|array

要记录的消息。这可以是简单的字符串或更复杂的数据结构,例如数组。

$category string

消息的类别。

                public static function trace($message, $category = 'application')
{
    static::debug($message, $category);
}

            
warning() 公共静态方法

记录警告消息。

警告消息通常在执行可以继续的情况下发生错误时记录。

public static void warning ( $message, $category 'application' )
$message string|array

要记录的消息。这可以是简单的字符串或更复杂的数据结构,例如数组。

$category string

消息的类别。

                public static function warning($message, $category = 'application')
{
    static::getLogger()->log($message, Logger::LEVEL_WARNING, $category);
}