Yii::app() 是 Yii 1.x 中贯穿整個請求生命周期的核心單例對象(Yii 2.x 對應 Yii::$app)。本文詳細解析其角色、常用組件訪問方式及底層原理。
CWebApplication 實例(繼承自 CApplication → CComponent)Yii::createWebApplication($config)->run() 時| 訪問方式 | 對應組件 | 說明 |
|---|---|---|
Yii::app()->user | CWebUser | 當前用戶身份驗證信息(等同 getUser()) |
Yii::app()->request | CHttpRequest | 封裝 $_GET/$_POST/$_COOKIE/$_SERVER 等 |
Yii::app()->session | CHttpSession | Session 管理 |
Yii::app()->db | CDbConnection | 數據庫連接(ActiveRecord 依賴) |
Yii::app()->authManager | CAuthManager | RBAC 權限管理 |
Yii::app()->getLayoutPath() | 方法調用 | 獲取佈局文件路徑 |
得益於 CComponent 的 __get()/__set():
// 以下等價
Yii::app()->request->url;
Yii::app()->getRequest()->getUrl();
// 組件懶加載:首次訪問時才實例化
Yii::app()->user; // 內部調用 getUser() 創建 CWebUser 實例
// 獲取當前請求相對 URL
$currentUrl = Yii::app()->request->url; // /index.php?r=user/login
// 判斷用戶是否登錄
if (!Yii::app()->user->isGuest) {
$uid = Yii::app()->user->id;
$name = Yii::app()->user->name;
}
// 設置全局頁面標題
Yii::app()->name = '我的應用';
Yii::app() → Yii::$app(Application 實例)Yii::$app->user、Yii::$app->request、Yii::$app->dbprotected/config/main.php 移至 config/web.php / config/console.phpYii::app()。components 節點註冊,始可通过 Yii::app()->compName 訪問。