亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

directory search
閱讀前篇 簡介 Yii 是什么 從 Yii 1.1 升級 入門 安裝 Yii 運行應(yīng)用 第一次問候 使用Forms 數(shù)據(jù)庫應(yīng)用 使用 Gii 生成代碼 進(jìn)階 應(yīng)用結(jié)構(gòu) 概述 入口腳本 應(yīng)用(Applications) 應(yīng)用組件(Application Components) 控制器(Controllers) 模型(Models) 視圖(views) 模塊(Modules) 過濾器(Filters) 小部件(Widgets) 前端資源(Assets) 擴(kuò)展(Extensions) 請求處理 運行概述 啟動引導(dǎo)(Bootstrapping) 路由和創(chuàng)建URL 請求(Requests) 響應(yīng)(Responses) Sessions 和 Cookies 錯誤處理(Handling Errors) 日志(Logging) 關(guān)鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類自動加載(Autoloading) 服務(wù)定位器(Service Locator) 依賴注入容器(Dependency Injection Container) 配合數(shù)據(jù)庫工作 數(shù)據(jù)庫訪問 (Data Access Objects) 查詢生成器(Query Builder) 活動記錄(Active Record) 數(shù)據(jù)庫遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶數(shù)據(jù) 創(chuàng)建表單(Creating Forms) 輸入驗證(Validating Input) 文件上傳(Uploading Files) 收集列表輸入(Collecting Tabular Input) 多模型的復(fù)合表單(Getting Data for Multiple Models) 顯示數(shù)據(jù) 格式化輸出數(shù)據(jù)(Data Formatting) 分頁(Pagination) 排序(Sorting) 數(shù)據(jù)提供器(Data Providers) 數(shù)據(jù)小部件(Data Widgets) 客戶端腳本使用(Working with Client Scripts) 主題(Theming) 安全 認(rèn)證(Authentication) 授權(quán)(Authorization) 處理密碼(Working with Passwords) 客戶端認(rèn)證(Auth Clients) 最佳安全實踐(Best Practices) 緩存 概述 數(shù)據(jù)緩存 片段緩存 頁面緩存 HTTP 緩存 RESTfull Web服務(wù) 快速入門(Quick Start) 資源(Resources) 控制器(Controllers) 路由(Routing) 格式化響應(yīng)(Response Formatting) 授權(quán)認(rèn)證(Authentication) 速率限制(Rate Limiting) 版本(Versioning) 錯誤處理(Error Handling) 開發(fā)工具 調(diào)試工具欄和調(diào)試器 使用Gii生成代碼 生成API文檔 測試 概述(Overview) 配置測試環(huán)境(Testing environment setup) 單元測試(Unit Tests) 功能測試(Function Tests) 驗收測試(Acceptance Tests) 測試夾具(Fixtures) 高級專題 高級應(yīng)用模板 創(chuàng)建自定義應(yīng)用程序結(jié)構(gòu) 控制臺命令 核心驗證器(Core Validators) 國際化 收發(fā)郵件 性能優(yōu)化 共享主機環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
characters

組件(Component)

組件(Component)

組件是 Yii 應(yīng)用的主要基石。是 yii\base\Component 類或其子類的實例。三個用以區(qū)分它和其它類的主要功能有:

  • 屬性(Property)
  • 事件(Event)
  • 行為(Behavior)

或單獨使用,或彼此配合,這些功能的應(yīng)用讓 Yii 的類變得更加靈活和易用。以小部件 yii\jui\DatePicker 來舉例,這是個方便你在?視圖?中生成一個交互式日期選擇器的 UI 組件:

use yii\jui\DatePicker;

echo DatePicker::widget([
    'language' => 'zh-CN',
    'name'  => 'country',
    'clientOptions' => [
        'dateFormat' => 'yy-mm-dd',
    ],
]);

這個小部件繼承自 yii\base\Component,它的各項屬性改寫起來會很容易。

正是因為組件功能的強大,他們比常規(guī)的對象(Object)稍微重量級一點,因為他們要使用額外的內(nèi)存和 CPU 時間來處理?事件?和?行為。如果你不需要這兩項功能,可以繼承 yii\base\Object 而不是 yii\base\Component。這樣組件可以像普通 PHP 對象一樣高效,同時還支持屬性(Property)功能。

當(dāng)繼承 yii\base\Component 或 yii\base\Object 時,推薦你使用如下的編碼風(fēng)格:

  • 若你需要重寫構(gòu)造方法(Constructor),傳入?$config?作為構(gòu)造器方法最后一個參數(shù),然后把它傳遞給父類的構(gòu)造方法。
  • 永遠(yuǎn)在你重寫的構(gòu)造方法結(jié)尾處調(diào)用一下父類的構(gòu)造方法。
  • 如果你重寫了 yii\base\Object::init() 方法,請確保你在?init?方法的開頭處調(diào)用了父類的?init?方法。

例子如下:

namespace yii\components\MyClass;

use yii\base\Object;

class MyClass extends Object{
    public $prop1;
    public $prop2;

    public function __construct($param1, $param2, $config = [])
    {
        // ... 配置生效前的初始化過程

        parent::__construct($config);
    }

    public function init()
    {
        parent::init();

        // ... 配置生效后的初始化過程
    }
}

另外,為了讓組件可以在創(chuàng)建實例時能被正確配置,請遵照以下操作流程:

$component = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]);
// 方法二:$component = \Yii::createObject([
    'class' => MyClass::className(),
    'prop1' => 3,
    'prop2' => 4,
], [1, 2]);

補充:盡管調(diào)用 Yii::createObject() 的方法看起來更加復(fù)雜,但這主要因為它更加靈活強大,它是基于依賴注入容器實現(xiàn)的。

yii\base\Object 類執(zhí)行時的生命周期如下:

  1. 構(gòu)造方法內(nèi)的預(yù)初始化過程。你可以在這兒給各屬性設(shè)置缺省值。
  2. 通過?$config?配置對象。配置的過程可能會覆蓋掉先前在構(gòu)造方法內(nèi)設(shè)置的默認(rèn)值。
  3. 在 yii\base\Object::init() 方法內(nèi)進(jìn)行初始化后的收尾工作。你可以通過重寫此方法,進(jìn)行一些良品檢驗,屬性的初始化之類的工作。
  4. 對象方法調(diào)用。
前三步都是在對象的構(gòu)造方法內(nèi)發(fā)生的。這意味著一旦你獲得了一個對象實例,那么它就已經(jīng)初始化就緒可供使用。
Previous article: Next article: