0 追蹤者

類別 Yii

繼承Yii » yii\BaseYii
自版本起可用2.0
原始碼 https://github.com/yiisoft/yii2/blob/master/framework/Yii.php

Yii 是一個提供通用框架功能的輔助類別。

它繼承自 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

方法詳情

隱藏繼承方法

autoload() 公開靜態方法

定義於: yii\BaseYii::autoload()

類別自動載入器。

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

  1. $classMap 中搜尋;
  2. 如果類別是命名空間的 (例如 yii\base\Component),它將嘗試包含與相應路徑別名關聯的檔案 (例如 @yii/base/Component.php);

此自動載入器允許載入遵循 PSR-4 標準 且其頂層命名空間或子命名空間定義為路徑別名的類別。

範例:當定義別名 @yii@yii/bootstrap 時,yii\bootstrap 命名空間中的類別將使用指向 bootstrap 擴充功能檔案安裝目錄的 @yii/bootstrap 別名載入,而其他 yii 命名空間中的所有類別將從 yii 框架目錄載入。

另請參閱 關於自動載入的指南章節

public static void autoload ( $className )
$className 字串

不帶前導反斜線 "\" 的完整類別名稱

拋出 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() 公開靜態方法

定義於: 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 字串

程式碼區塊的 Token

$category 字串

此日誌訊息的類別

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

            
configure() 公開靜態方法

定義於: yii\BaseYii::configure()

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

public static object configure ( $object, $properties )
$object 物件

要配置的物件

$properties 陣列

以名稱-值對形式給出的屬性初始值。

傳回 物件

物件本身

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

            
createObject() 公開靜態方法

定義於: 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

物件類型。這可以用以下形式之一指定

  • 字串:表示要建立的物件的類別名稱
  • 配置陣列:陣列必須包含一個 class 元素,該元素被視為物件類別,其餘的名稱-值對將用於初始化相應的物件屬性
  • PHP 可調用:可以是匿名函式或表示類別方法的陣列 ([$class or $object, $method])。可調用應該傳回正在建立的物件的新實例。
$params 陣列

建構子參數

傳回 物件

建立的物件

拋出 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 起可用)

定義於: yii\BaseYii::debug()

記錄除錯訊息。

追蹤訊息主要記錄用於開發目的,以查看某些程式碼的執行工作流程。此方法僅在應用程式處於除錯模式時記錄訊息。

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

要記錄的訊息。這可以是簡單的字串或更複雜的資料結構,例如陣列。

$category 字串

訊息的類別。

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

            
endProfile() 公開靜態方法

定義於: yii\BaseYii::endProfile()

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

這必須與先前調用相同類別名稱的 beginProfile() 相匹配。

另請參閱 beginProfile()

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

程式碼區塊的 Token

$category 字串

此日誌訊息的類別

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

            
error() 公開靜態方法

定義於: yii\BaseYii::error()

記錄錯誤訊息。

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

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

要記錄的訊息。這可以是簡單的字串或更複雜的資料結構,例如陣列。

$category 字串

訊息的類別。

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

            
getAlias() 公開靜態方法

定義於: yii\BaseYii::getAlias()

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

翻譯是根據以下程序完成的

  1. 如果給定的別名不是以 '@' 開頭,則會不更改地傳回;
  2. 否則,尋找與給定別名的開頭部分匹配的最長已註冊別名。如果存在,則將給定別名的匹配部分替換為相應的已註冊路徑。
  3. 拋出例外或傳回 false,取決於 $throwException 參數。

例如,預設情況下,'@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 字串

要翻譯的別名。

$throwException 布林值

如果給定的別名無效,是否拋出例外。如果為 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() 公開靜態方法

定義於: yii\BaseYii::getObjectVars()

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

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

public static array getObjectVars ( $object )
$object 物件

要處理的物件

傳回 陣列

物件的公開成員變數

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

            
getRootAlias() 公開靜態方法

定義於: yii\BaseYii::getRootAlias()

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

根別名是先前透過 setAlias() 註冊的別名。如果給定的別名與多個根別名匹配,則將傳回最長的一個。

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

別名

傳回 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\BaseYii::getVersion()

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

public static string getVersion ( )
傳回 字串

Yii 框架的版本

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

            
info() 公開靜態方法

定義於: yii\BaseYii::info()

記錄資訊性訊息。

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

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

要記錄的訊息。這可以是簡單的字串或更複雜的資料結構,例如陣列。

$category 字串

訊息的類別。

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

            
powered() 公開靜態方法
自 2.0.14 版本起已棄用,此方法將在 2.1.0 版本中移除。

定義於: yii\BaseYii::powered()

傳回一個 HTML 超連結,可以在您的網頁上顯示「Powered by Yii Framework」資訊。

public static string powered ( )
傳回 字串

一個 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() 公開靜態方法

定義於: yii\BaseYii::setAlias()

註冊路徑別名。

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

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

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

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

請參閱 關於別名的指南文章 以獲取更多資訊。

另請參閱 getAlias()

public static void setAlias ( $alias, $path )
$alias 字串

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

$path string|null

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

  • 目錄或檔案路徑 (例如 /tmp, /tmp/main.txt)
  • URL (例如 https://yii.dev.org.tw)
  • 路徑別名 (例如 @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() 公開靜態方法

定義於: yii\BaseYii::setLogger()

設定 logger 物件。

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

logger 物件。

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

            
t() 公開靜態方法

定義於: 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 字串

訊息類別。

$message 字串

要翻譯的訊息。

$params 陣列

將用於替換訊息中相應佔位符的參數。

$language string|null

語言代碼 (例如 en-US, en)。如果為 null,將使用目前的 應用程式語言

傳回 字串

翻譯後的訊息。

                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()

定義於: yii\BaseYii::trace()

debug() 的別名。

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

要記錄的訊息。這可以是簡單的字串或更複雜的資料結構,例如陣列。

$category 字串

訊息的類別。

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

            
warning() 公開靜態方法

定義於: yii\BaseYii::warning()

記錄警告訊息。

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

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

要記錄的訊息。這可以是簡單的字串或更複雜的資料結構,例如陣列。

$category 字串

訊息的類別。

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