# 應用組件
應用主體是[服務定位器](http://www.yiichina.com/doc/guide/2.0/concept-service-locator),它部署一組提供各種不同功能的?*應用組件*?來處理請求。 例如,`urlManager`組件負責處理網頁請求路由到對應的控制器。`db`組件提供數據庫相關服務等等。
在同一個應用中,每個應用組件都有一個獨一無二的 ID 用來區分其他應用組件,你可以通過如下表達式訪問應用組件。
~~~
\Yii::$app->componentID
~~~
例如,可以使用?`\Yii::$app->db`?來獲取到已注冊到應用的 yii\db\Connection, 使用?`\Yii::$app->cache`?來獲取到已注冊到應用的 yii\caching\Cache。
第一次使用以上表達式時候會創建應用組件實例,后續再訪問會返回此實例,無需再次創建。
應用組件可以是任意對象,可以在?[應用主體配置](http://www.yiichina.com/doc/guide/2.0/structure-applications#application-configurations)配置 yii\base\Application::components 屬性 . 例如:
~~~
[
'components' => [
// 使用類名注冊 "cache" 組件
'cache' => 'yii\caching\ApcCache',
// 使用配置數組注冊 "db" 組件
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=demo',
'username' => 'root',
'password' => '',
],
// 使用函數注冊"search" 組件
'search' => function () {
return new app\components\SolrService;
},
],
]
~~~
> 補充:請謹慎注冊太多應用組件,應用組件就像全局變量,使用太多可能加大測試和維護的難度。 一般情況下可以在需要時再創建本地組件。
## 引導啟動組件
上面提到一個應用組件只會在第一次訪問時實例化,如果處理請求過程沒有訪問的話就不實例化。 有時你想在每個請求處理過程都實例化某個組件即便它不會被訪問, 可以將該組件ID加入到應用主體的 yii\base\Application::bootstrap 屬性中。
例如, 如下的應用主體配置保證了?`log`?組件一直被加載。
~~~
[
'bootstrap' => [
// 將 log 組件 ID 加入引導讓它始終載入
'log',
],
'components' => [
'log' => [
// "log" 組件的配置
],
],
]
~~~
## 核心應用組件
Yii 定義了一組固定ID和默認配置的?*核心*?組件,例如 yii\web\Application::request 組件 用來收集用戶請求并解析?[路由](http://www.yiichina.com/doc/guide/2.0/runtime-routing); yii\base\Application::db 代表一個可以執行數據庫操作的數據庫連接。 通過這些組件,Yii應用主體能處理用戶請求。
下面是預定義的核心應用組件列表,可以和普通應用組件一樣配置和自定義它們。 當你配置一個核心組件,不指定它的類名的話就會使用Yii默認指定的類。
* yii\web\AssetManager: 管理資源包和資源發布,詳情請參考?[管理資源](http://www.yiichina.com/doc/guide/2.0/output-assets)?一節。
* yii\db\Connection: 代表一個可以執行數據庫操作的數據庫連接, 注意配置該組件時必須指定組件類名和其他相關組件屬性,如yii\db\Connection::dsn。 詳情請參考?[數據訪問對象](http://www.yiichina.com/doc/guide/2.0/db-dao)?一節。
* yii\base\Application::errorHandler: 處理 PHP 錯誤和異常, 詳情請參考?[錯誤處理](http://www.yiichina.com/doc/guide/2.0/tutorial-handling-errors)?一節。
* yii\i18n\Formatter: 格式化輸出顯示給終端用戶的數據,例如數字可能要帶分隔符, 日期使用長格式。詳情請參考?[格式化輸出數據](http://www.yiichina.com/doc/guide/2.0/output-formatting)一節。
* yii\i18n\I18N: 支持信息翻譯和格式化。詳情請參考?[國際化](http://www.yiichina.com/doc/guide/2.0/tutorial-i18n)?一節。
* yii\log\Dispatcher: 管理日志對象。詳情請參考?[日志](http://www.yiichina.com/doc/guide/2.0/tutorial-logging)?一節。
* yii\swiftmailer\Mailer: 支持生成郵件結構并發送,詳情請參考?[郵件](http://www.yiichina.com/doc/guide/2.0/tutorial-mailing)?一節。
* yii\base\Application::response: 代表發送給用戶的響應, 詳情請參考?[響應](http://www.yiichina.com/doc/guide/2.0/runtime-responses)?一節。
* yii\base\Application::request: 代表從終端用戶處接收到的請求, 詳情請參考?[請求](http://www.yiichina.com/doc/guide/2.0/runtime-requests)?一節。
* yii\web\Session: 代表會話信息,僅在yii\web\Application 網頁應用中可用, 詳情請參考?[Sessions (會話) and Cookies](http://www.yiichina.com/doc/guide/2.0/runtime-sessions-cookies)?一節。
* yii\web\UrlManager: 支持URL地址解析和創建, 詳情請參考?[URL 解析和生成](http://www.yiichina.com/doc/guide/2.0/runtime-url-handling)?一節。
* yii\web\User: 代表認證登錄用戶信息,僅在yii\web\Application 網頁應用中可用, 詳情請參考?[認證](http://www.yiichina.com/doc/guide/2.0/security-authentication)?一節。
* yii\web\View: 支持渲染視圖,詳情請參考?[Views](http://www.yiichina.com/doc/guide/2.0/structure-views)?一節。
- 介紹(Introduction)
- 關于 Yii(About Yii)
- 從 Yii 1.1 升級(Upgrading from Version 1.1)
- 入門(Getting Started)
- 安裝 Yii(Installing Yii)
- 運行應用(Running Applications)
- 第一次問候(Saying Hello)
- 使用 Forms(Working with Forms)
- 玩轉 Databases(Working with Databases)
- 用 Gii 生成代碼(Generating Code with Gii)
- 更上一層樓(Looking Ahead)
- 應用結構(Application Structure)
- 結構概述(Overview)
- 入口腳本(Entry Scripts)
- 應用(Applications)
- 應用組件(Application Components)
- 控制器(Controllers)
- 模型(Models)
- 視圖(Views)
- 模塊(Modules)
- 過濾器(Filters)
- 小部件(Widgets)
- 前端資源(Assets)
- 擴展(Extensions)
- 請求處理(Handling Requests)
- 運行概述(Overview)
- 引導(Bootstrapping)
- 路由引導與創建 URL(Routing and URL Creation)
- 請求(Requests)
- 響應(Responses)
- Sessions and Cookies
- 錯誤處理(Handling Errors)
- 日志(Logging)
- 關鍵概念(Key Concepts)
- 組件(Components)
- 屬性(Properties)
- 事件(Events)
- 行為(Behaviors)
- 配置(Configurations)
- 別名(Aliases)
- 類自動加載(Class Autoloading)
- 服務定位器(Service Locator)
- 依賴注入容器(Dependency Injection Container)
- 配合數據庫工作(Working with Databases)
- 數據庫訪問(Data Access Objects): 數據庫連接、基本查詢、事務和模式操作
- 查詢生成器(Query Builder): 使用簡單抽象層查詢數據庫
- 活動記錄(Active Record): 活動記錄對象關系映射(ORM),檢索和操作記錄、定義關聯關系
- 數據庫遷移(Migrations): 在團體開發中對你的數據庫使用版本控制
- Sphinx
- Redis
- MongoDB
- ElasticSearch
- 接收用戶數據(Getting Data from Users)
- 創建表單(Creating Forms)
- 輸入驗證(Validating Input)
- 文件上傳(Uploading Files)
- 收集列表輸入(Collecting Tabular Input)
- 多模型同時輸入(Getting Data for Multiple Models)
- 顯示數據(Displaying Data)
- 格式化輸出數據(Data Formatting)
- 分頁(Pagination)
- 排序(Sorting)
- 數據提供器(Data Providers)
- 數據小部件(Data Widgets)
- 操作客戶端腳本(Working with Client Scripts)
- 主題(Theming)
- 安全(Security)
- 認證(Authentication)
- 授權(Authorization)
- 處理密碼(Working with Passwords)
- 客戶端認證(Auth Clients)
- 安全領域的最佳實踐(Best Practices)
- 緩存(Caching)
- 概述(Overview)
- 數據緩存(Data Caching)
- 片段緩存(Fragment Caching)
- 分頁緩存(Page Caching)
- HTTP 緩存(HTTP Caching)
- RESTful Web 服務
- 快速入門(Quick Start)
- 資源(Resources)
- 控制器(Controllers)
- 路由(Routing)
- 格式化響應(Response Formatting)
- 授權驗證(Authentication)
- 速率限制(Rate Limiting)
- 版本化(Versioning)
- 錯誤處理(Error Handling)
- 開發工具(Development Tools)
- 調試工具欄和調試器(Debug Toolbar and Debugger)
- 使用 Gii 生成代碼(Generating Code using Gii)
- TBD 生成 API 文檔(Generating API Documentation)
- 測試(Testing)
- 概述(Overview)
- 搭建測試環境(Testing environment setup)
- 單元測試(Unit Tests)
- 功能測試(Functional Tests)
- 驗收測試(Acceptance Tests)
- 測試夾具(Fixtures)
- 高級專題(Special Topics)
- 高級應用模版(Advanced Project Template)
- 從頭構建自定義模版(Building Application from Scratch)
- 控制臺命令(Console Commands)
- 核心驗證器(Core Validators)
- 國際化(Internationalization)
- 收發郵件(Mailing)
- 性能優化(Performance Tuning)
- 共享主機環境(Shared Hosting Environment)
- 模板引擎(Template Engines)
- 集成第三方代碼(Working with Third-Party Code)
- 小部件(Widgets)
- Bootstrap 小部件(Bootstrap Widgets)
- jQuery UI 小部件(jQuery UI Widgets)
- 助手類(Helpers)
- 助手一覽(Overview)
- Array 助手(ArrayHelper)
- Html 助手(Html)
- Url 助手(Url)