类 Yii
继承 | Yii » yii\BaseYii |
---|---|
可用版本 | 2.0 |
源代码 | https://github.com/yiisoft/yii2/blob/master/framework/Yii.php |
Yii 是一个帮助类,提供常见的框架功能。
它继承自 yii\BaseYii,该类提供了实际的实现。通过编写你自己的 Yii 类,你可以定制 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 超链接,可以在你的网页上显示 "Powered by Yii Framework" 信息。 | yii\BaseYii |
setAlias() | 注册路径别名。 | yii\BaseYii |
setLogger() | 设置日志记录器对象。 | yii\BaseYii |
t() | 将消息翻译成指定的语言。 | yii\BaseYii |
trace() | debug() 的别名。 | yii\BaseYii |
warning() | 记录警告消息。 | yii\BaseYii |
方法详情
类自动加载器。
当 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?");
}
}
定义于: yii\BaseYii::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);
}
使用初始属性值配置对象。
public static object configure ( $object, $properties ) | ||
$object | object |
要配置的对象 |
$properties | array |
以名称-值对形式给出的属性初始值。 |
返回值 | object |
对象本身 |
---|
public static function configure($object, $properties)
{
foreach ($properties as $name => $value) {
$object->$name = $value;
}
return $object;
}
定义于: yii\BaseYii::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 |
对象类型。这可以通过以下几种形式之一指定
|
$params | array |
构造函数参数 |
返回值 | object |
创建的对象 |
---|---|---|
抛出 | 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);
}
}
定义于: yii\BaseYii::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);
}
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');
}
定义于: yii\BaseYii::getObjectVars()
返回对象的公共成员变量。
提供此方法是为了能够获取对象的公共成员变量。它与 "get_object_vars()" 不同,因为后者将在对象自身内部调用时返回私有和受保护的变量。
public static array getObjectVars ( $object ) | ||
$object | object |
要处理的对象 |
返回值 | array |
对象的公共成员变量 |
---|
public static function getObjectVars($object)
{
return get_object_vars($object);
}
public static string|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\BaseYii::getVersion()
返回表示 Yii 框架当前版本的字符串。
public static string 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 超链接,可以在你的网页上显示 "Powered by Yii Framework" 信息。
public static string 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 | string|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\BaseYii::t()
将消息翻译成指定的语言。
这是 yii\i18n\I18N::translate() 的快捷方法。
翻译将根据消息类别进行,并将使用目标语言。
你可以在翻译消息中添加参数,这些参数将在翻译后用相应的值替换。此格式是在参数名周围使用花括号,如下例所示
$username = 'Alexander';
echo \Yii::t('app', 'Hello, {username}!', ['username' => $username]);
使用 PHP intl 扩展 消息格式化程序支持进一步的消息参数格式化。有关更多详细信息,请参阅 yii\i18n\I18N::translate()。
public static string t ( $category, $message, $params = [], $language = null ) | ||
$category | string |
消息类别。 |
$message | string |
要翻译的消息。 |
$params | array |
将用于替换消息中对应占位符的参数。 |
$language | string|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);
}
定义于: yii\BaseYii::trace()
debug() 的别名。
public static void trace ( $message, $category = 'application' ) | ||
$message | string|array |
要记录的消息。这可以是简单的字符串或更复杂的数据结构,例如数组。 |
$category | string |
消息的类别。 |
public static function trace($message, $category = 'application')
{
static::debug($message, $category);
}
注册 或者 登录 才能发表评论。