Yii 組件為 yii\base\Component 或子類實例,具備屬性、事件、行為三大特性。若不需事件與行為,可繼承輕量級 yii\base\Object 僅保留屬性支援。繼承時需遵循建構子規範:接收 $config 陣列為最後參數並傳遞給父類,init() 方法開頭呼叫 parent::init()。
class MyClass extends Object {
public $prop1; public $prop2;
public function __construct($param1, $param2, $config = []) {
parent::__construct($config);
}
public function init() {
parent::init(); // 配置生效後初始化
}
}
// 兩種實例化方式
$component = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]);
$component = \Yii::createObject(['class' => MyClass::className(), 'prop1' => 3], [1, 2]);
應用物件為前端控制器,依配置文件載入輔助組件。配置項對應規則:公共成員變量直接賦值、Setter 方法自動調用(不區分大小寫)。核心組件分兩類註冊:
掌握三步驟即可靈活配置任意組件:
// CDbConnection 可配置屬性範例
'components' => [
'db' => [
'class' => 'myCDbConnection', // 自定義類別
'connectionString' => 'mysql:host=localhost;dbname=test',
'username' => 'root',
'charset' => 'utf8',
'tablePrefix' => 'tbl_',
'enableProfiling' => true, // 對應 setEnableProfiling()
],
'mydb' => [ // 多資料庫連線
'class' => 'myDbConnection',
'connectionString' => 'mysql:host=localhost;dbname=test2',
]
]
執行期透過 Yii::app()->getComponent('urlManager') 或魔術方法 Yii::app()->urlManager 獲取實例(延遲實例化)。自定義組件只需在 components 配置指定類別與屬性,即可替換核心組件或新增業務組件,充分發揮 Yii 組件化架構的擴展優勢。