1 位追蹤者

類別 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

屬性詳細資訊

隱藏繼承的屬性

$aliases 公開靜態屬性

已註冊的路徑別名

參見

public static array $aliases = [
    
'@yii' => __DIR__,
]
$app 公開靜態屬性

應用程式實例

$classMap public static property

Yii 自動載入機制使用的類別映射表。陣列的鍵名是類別名稱(不帶開頭反斜線),而陣列的值是相應的類別檔案路徑(或 路徑別名)。此屬性主要影響 autoload() 的運作方式。

另請參閱 autoload()

public static array $classMap = []
$container public static property

createObject() 使用的依賴注入(DI)容器。您可以使用 yii\di\Container::set() 來設定類別的所需依賴項及其初始屬性值。

參見

public static yii\di\Container $container null

方法詳情

隱藏繼承的方法

autoload() public static method

類別自動載入器。

當 PHP 看到未知類別時,此方法會自動調用。該方法將嘗試根據以下步驟包含類別檔案

  1. $classMap 中搜尋;
  2. 如果類別是命名空間的(例如 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?");
    }
}

            
beginProfile() public static method

標記程式碼區塊分析的開始。

這必須與調用具有相同類別名稱的 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 method

使用初始屬性值配置物件。

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;
}

            
createObject() public static method

使用給定的配置建立新物件。

您可以將此方法視為 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 陣列

建構子參數

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.');
}

            
debug() public static method (自 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() public static method

標記程式碼區塊分析的結束。

這必須與先前調用具有相同類別名稱的 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 method

記錄錯誤訊息。

當應用程式執行期間發生無法恢復的錯誤時,通常會記錄錯誤訊息。

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() public static method

將路徑別名轉換為實際路徑。

翻譯根據以下步驟完成

  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。

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;
}

            
getLogger() public static method

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');
}

            
getObjectVars() public static method

傳回物件的公開成員變數。

提供此方法是為了讓我們可以取得物件的公有成員變數。它與 "get_object_vars()" 不同,因為後者如果在物件本身內調用,將傳回私有和受保護的變數。

public static array getObjectVars ( $object )
$object object

要處理的物件

return 陣列

物件的公有成員變數

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

            
getRootAlias() public static method

傳回給定別名的根別名部分。

根別名是先前透過 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;
}

            
getVersion() public static method

傳回代表 Yii 框架目前版本的字串。

public static string getVersion ( )
return string

Yii 框架的版本

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

            
info() public static method

記錄資訊訊息。

資訊性訊息通常由應用程式記錄,以記錄一些重要事件(例如管理員登入)。

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() public static method
自 2.0.14 版本起已棄用,此方法將在 2.1.0 版本中移除。

傳回一個 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>',
    ]);
}

            
setAlias() public static method

註冊路徑別名。

路徑別名是代表長路徑(檔案路徑、URL 等)的簡短名稱。例如,我們使用 '@yii' 作為 Yii 框架目錄路徑的別名。

路徑別名必須以字元 '@' 開頭,以便可以輕鬆地區分非別名路徑。

請注意,此方法不檢查給定的路徑是否存在。它所做的只是將別名與路徑關聯起來。

將修剪給定路徑中的任何尾隨 '/' 和 '\' 字元。

有關更多資訊,請參閱 關於別名的指南文章

另請參閱 getAlias()

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

別名名稱(例如 "@yii")。它必須以 '@' 字元開頭。它可能包含正斜線 '/',在透過 getAlias() 執行別名翻譯時,它用作邊界字元。

$path string|null

與別名對應的路徑。如果此值為 null,則將移除別名。將修剪尾隨 '/' 和 '\' 字元。這可以是

  • 目錄或檔案路徑(例如 /tmp/tmp/main.txt
  • URL(例如 https://yii.dev.org.tw
  • 路徑別名(例如 @yii/base)。在這種情況下,路徑別名將首先透過調用 getAlias() 轉換為實際路徑。
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]);
        }
    }
}

            
setLogger() public static method

設定 logger 物件。

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

記錄器物件。

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

            
t() public static method

將訊息翻譯成指定的語言。

這是 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

語言代碼(例如 en-USen)。如果此值為 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);
}

            
trace() public static method
自 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 method

記錄警告訊息。

當執行可以繼續但發生錯誤時,通常會記錄警告訊息。

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);
}