Yii 所有核心類別(控制器、模型、組件、應用)皆繼承自 CComponent,提供三大核心機制:屬性、事件、行為。
定義 getXxx()/setXxx() 即可像存取變數般使用 $obj->xxx。
<?php
class GameController extends CController {
// 實際儲存於頁面狀態
public function getWord() {
return $this->getPageState('word');
}
public function setWord($value) {
$this->setPageState('word', $value);
}
}
// 使用
$word = $this->word; // 呼叫 getWord()
$this->word = 'YII'; // 呼叫 setWord('YII')
// 唯讀屬性:僅定義 getter
// 寫入唯讀屬性會拋出 CException
優點:讀寫時可注入邏輯(驗證、觸發事件、延遲載入)。
<?php
public function onClicked($event) {
$this->raiseEvent('onClicked', $event);
}
on 開頭(大小寫不敏感)$event 為 CEvent 或子類實例,至少包含 sender 屬性<?php
// 全域函式
$component->onClicked = 'myCallback';
// 物件方法
$component->onClicked = array($obj, 'methodName');
// 匿名函式 (PHP 5.3+)
$component->onClicked = function($event) { ... };
$component->onClicked() 即觸發$event->handled = true 停止後續執行行為類別實作 IBehavior(通常繼承 CBehavior),其方法可被綁定組件「繼承」使用。
<?php
$component->attachBehavior('tree', $behavior);
$component->test(); // 呼叫行為的 test()
// 存取行為屬性 (1.1.0+)
$component->xyz; // 等同 $behavior->xyz
// 暫時停用/啟用
$component->disableBehavior('tree');
$component->enableBehavior('tree');
行為綁定時可自動掛載事件處理器,擴充組件行為而不修改原碼。
created_at/updated_atCComponent 讓 Yii 組件具備:
這是掌握 Yii 擴充機制、開發可複用組件的關鍵基礎。