类 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 |
属性详情
Yii 自动加载机制使用的类映射。数组键是类名(不带前导反斜杠),数组值是相应的类文件路径(或 路径别名)。此属性主要影响 autoload() 的工作方式。
参见 autoload()。
由 createObject() 使用的依赖注入 (DI) 容器。您可以使用 yii\di\Container::set() 来设置类及其初始属性值的必要依赖项。
参见
方法详情
类自动加载加载器。
当 PHP 看到一个未知类时,此方法会自动调用。该方法将尝试根据以下步骤包含类文件
- 在 $classMap 中搜索;
- 如果类是命名空间的(例如
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?");
}
}
标记用于分析的代码块的开始。
这必须与对 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);
}
使用初始属性值配置对象。
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;
}
使用给定的配置创建新对象。
您可以将此方法视为 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 |
对象类型。可以以下列形式之一指定:
|
$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.');
}
记录调试消息。
跟踪消息主要用于开发目的,以查看某些代码的执行工作流程。此方法仅在应用程序处于调试模式时才记录消息。
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);
}
}
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);
}
记录错误消息。
错误消息通常在应用程序执行期间发生不可恢复的错误时记录。
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);
}
将路径别名转换为实际路径。
翻译是根据以下步骤进行的
- 如果给定的别名不以“@”开头,则会原样返回;
- 否则,查找与给定别名开头部分匹配的最长已注册别名。如果它存在,则用相应的已注册路径替换给定别名的匹配部分。
- 根据
$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;
}
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');
}
返回对象的公共成员变量。
提供此方法是为了让我们能够获取对象的公共成员变量。它不同于“get_object_vars()”,因为后者将在对象自身内部调用时返回私有和受保护的变量。
public static array getObjectVars ( $object ) | ||
$object | 对象 |
要处理的对象 |
返回 | array |
对象的公共成员变量 |
---|
public static function getObjectVars($object)
{
return get_object_vars($object);
}
返回给定别名的根别名部分。
根别名是之前通过 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;
}
返回表示当前 Yii 框架版本的字符串。
public static 字符串 getVersion ( ) | ||
返回 | string |
Yii 框架的版本 |
---|
public static function getVersion()
{
return '2.0.50-dev';
}
记录信息性消息。
应用程序通常会记录一条信息性消息,以记录重要的事件(例如管理员登录)。
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);
}
返回一个 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>',
]);
}
注册路径别名。
路径别名是代表长路径(文件路径、URL 等)的简短名称。例如,我们使用“@yii”作为 Yii 框架目录路径的别名。
路径别名必须以字符“@”开头,以便于将其与非别名路径区分开来。
请注意,此方法不会检查给定路径是否存在。它只做的是将别名与路径关联起来。
给定路径中的任何尾部“/”和“\”字符都将被修剪。
有关更多信息,请参阅 关于别名的指南文章。
另请参阅 getAlias().
public static void setAlias ( $alias, $path ) | ||
$alias | string |
别名名称(例如“@yii”)。它必须以“@”字符开头。它可能包含正斜杠“/”,它用作通过 getAlias() 执行别名转换时的边界字符。 |
$path | 字符串|null |
与别名对应的路径。如果为 null,则将删除该别名。尾部“/”和“\”字符将被修剪。这可以是
|
抛出 | 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]);
}
}
}
设置日志记录器对象。
public static void setLogger ( $logger ) | ||
$logger | yii\log\Logger|null |
日志记录器对象。 |
public static function setLogger($logger)
{
self::$_logger = $logger;
}
将消息翻译成指定的语言。
这是 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 |
语言代码(例如 |
返回 | 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);
}
debug() 的别名。
public static void trace ( $message, $category = 'application' ) | ||
$message | string|array |
要记录的消息。这可以是简单的字符串或更复杂的数据结构,例如数组。 |
$category | string |
消息的类别。 |
public static function trace($message, $category = 'application')
{
static::debug($message, $category);
}
记录警告消息。
警告消息通常在执行可以继续的情况下发生错误时记录。
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);
}
注册 或 登录 以进行评论。