類別 yii\BaseYii
繼承關係 | yii\BaseYii |
---|---|
子類別 | Yii |
從版本起可用 | 2.0 |
原始碼 | https://github.com/yiisoft/yii2/blob/master/framework/BaseYii.php |
BaseYii 是 Yii 框架的核心輔助類別。
請勿直接使用 BaseYii。請改用其子類別 Yii,您可以替換 Yii 以自訂 BaseYii 的方法。
公開屬性
屬性 | 類型 | 描述 | 定義於 |
---|---|---|---|
$aliases | 陣列 | 已註冊的路徑別名 | yii\BaseYii |
$app | yii\console\Application|yii\web\Application | 應用程式實例 | yii\BaseYii |
$classMap | 陣列 | 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() | 設定 logger 物件。 | 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 standard 且其頂層命名空間或子命名空間定義為路徑別名的類別。
範例:當定義了別名 @yii
和 @yii/bootstrap
時,yii\bootstrap
命名空間中的類別將使用指向 bootstrap 擴充套件檔案安裝目錄的 @yii/bootstrap
別名載入,而來自其他 yii
命名空間的所有類別將從 yii 框架目錄載入。
另請參閱 關於自動載入的指南章節。
public static void autoload ( $className ) | ||
$className | string |
不帶開頭反斜線 "\" 的完整類別名稱 |
throws | 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 | object |
要配置的物件 |
$properties | 陣列 |
以名稱-值對形式給出的屬性初始值。 |
return | object |
物件本身 |
---|
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 | 陣列 |
建構子參數 |
return | object |
建立的物件 |
---|---|---|
throws | 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。 |
return | string|false |
與別名對應的路徑,如果先前未註冊根別名,則為 false。 |
---|---|---|
throws | 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 ( ) | ||
return | 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 | object |
要處理的物件 |
return | 陣列 |
物件的公有成員變數 |
---|
public static function getObjectVars($object)
{
return get_object_vars($object);
}
傳回給定別名的根別名部分。
根別名是先前透過 setAlias() 註冊的別名。如果給定的別名與多個根別名匹配,則將傳回最長的別名。
public static string|false getRootAlias ( $alias ) | ||
$alias | string |
別名 |
return | 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 string getVersion ( ) | ||
return | 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 ( ) | ||
return | string |
一個 HTML 超連結,可以顯示在您的網頁上,顯示「Powered by Yii Framework」資訊 |
---|
public static function powered()
{
return \Yii::t('yii', 'Powered by {yii}', [
'yii' => '<a href="https://yii.dev.org.tw/" 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,則將移除別名。將修剪尾隨 '/' 和 '\' 字元。這可以是
|
throws | 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]);
}
}
}
設定 logger 物件。
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 extensions 訊息格式器支援訊息參數的進一步格式化。 有關更多詳細資訊,請參閱 yii\i18n\I18N::translate()。
public static string t ( $category, $message, $params = [], $language = null ) | ||
$category | string |
訊息類別。 |
$message | string |
要翻譯的訊息。 |
$params | 陣列 |
將用於替換訊息中相應佔位符的參數。 |
$language | string|null |
語言代碼(例如 |
return | 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);
}
註冊 或 登入 以發表評論。