4 追蹤者

類別 yii\base\Model

繼承yii\base\Model » yii\base\Component » yii\base\BaseObject
實作ArrayAccess, IteratorAggregate, yii\base\Arrayable, yii\base\Configurable, yii\base\StaticInstanceInterface
使用 Traitsyii\base\ArrayableTrait, yii\base\StaticInstanceTrait
子類別yii\base\DynamicModel, yii\data\ActiveDataFilter, yii\data\DataFilter, yii\db\ActiveRecord, yii\db\BaseActiveRecord
自版本起可用2.0
原始碼 https://github.com/yiisoft/yii2/blob/master/framework/base/Model.php

Model 是資料模型的基底類別。

Model 實作了以下常用功能

  • 屬性宣告:預設情況下,每個公開類別成員都被視為模型屬性
  • 屬性標籤:每個屬性都可以與一個標籤關聯,用於顯示目的
  • 大量屬性賦值
  • 基於情境的驗證

Model 在執行資料驗證時也會引發以下事件

您可以直接使用 Model 來儲存模型資料,或透過自訂擴充它。

有關 Model 的更多詳細資訊和使用方法,請參閱模型指南文章

公開屬性

隱藏繼承的屬性

屬性 類型 描述 定義於
$activeValidators yii\validators\Validator[] 適用於目前$scenario 的驗證器。 yii\base\Model
$attributes array 屬性值 (名稱 => 值)。 yii\base\Model
$behaviors yii\base\Behavior[] 附加到此元件的行為列表。 yii\base\Component
$errors array 所有屬性或指定屬性的錯誤。 yii\base\Model
$firstErrors array 第一個錯誤。 yii\base\Model
$iterator ArrayIterator 用於遍歷列表中項目的迭代器。 yii\base\Model
$scenario string 此模型所處的情境。 yii\base\Model
$validators ArrayObject|yii\validators\Validator[] 模型中宣告的所有驗證器。 yii\base\Model

公共方法

隱藏繼承的方法

方法 描述 定義於
__call() 呼叫未定義為類別方法的具名方法。 yii\base\Component
__clone() 在透過複製現有物件建立物件後,會呼叫此方法。 yii\base\Model
__construct() 建構子。 yii\base\BaseObject
__get() 傳回元件屬性的值。 yii\base\Component
__isset() 檢查屬性是否已設定,即已定義且非 null。 yii\base\Component
__set() 設定元件屬性的值。 yii\base\Component
__unset() 將元件屬性設定為 null。 yii\base\Component
activeAttributes() 傳回在目前情境中受驗證約束的屬性名稱。 yii\base\Model
addError() 為指定的屬性新增新的錯誤。 yii\base\Model
addErrors() 新增錯誤列表。 yii\base\Model
afterValidate() 此方法在驗證結束後調用。 yii\base\Model
attachBehavior() 將行為附加到此元件。 yii\base\Component
attachBehaviors() 將行為列表附加到元件。 yii\base\Component
attributeHints() 傳回屬性提示。 yii\base\Model
attributeLabels() 傳回屬性標籤。 yii\base\Model
attributes() 傳回屬性名稱的列表。 yii\base\Model
beforeValidate() 此方法在驗證開始前調用。 yii\base\Model
behaviors() 傳回此元件應表現為的行為列表。 yii\base\Component
canGetProperty() 傳回指示是否可以讀取屬性的值。 yii\base\Component
canSetProperty() 傳回指示是否可以設定屬性的值。 yii\base\Component
className() 傳回此類別的完整限定名稱。 yii\base\BaseObject
clearErrors() 移除所有屬性或單一屬性的錯誤。 yii\base\Model
createValidators() 根據 rules() 中指定的驗證規則建立驗證器物件。 yii\base\Model
detachBehavior() 從元件中分離行為。 yii\base\Component
detachBehaviors() 從元件中分離所有行為。 yii\base\Component
ensureBehaviors() 確保在 behaviors() 中宣告的行為已附加到此元件。 yii\base\Component
extraFields() 傳回可以進一步擴展並由 toArray() 傳回的欄位列表。 yii\base\ArrayableTrait
fields() 傳回當未指定特定欄位時,預設應由 toArray() 傳回的欄位列表。 yii\base\Model
formName() 傳回此模型類別應使用的表單名稱。 yii\base\Model
generateAttributeLabel() 根據給定的屬性名稱產生使用者友善的屬性標籤。 yii\base\Model
getActiveValidators() 傳回適用於目前 $scenario 的驗證器。 yii\base\Model
getAttributeHint() 傳回指定屬性的文字提示。 yii\base\Model
getAttributeLabel() 傳回指定屬性的文字標籤。 yii\base\Model
getAttributes() 傳回屬性值。 yii\base\Model
getBehavior() 傳回具名行為物件。 yii\base\Component
getBehaviors() 傳回附加到此元件的所有行為。 yii\base\Component
getErrorSummary() 以一維陣列形式傳回所有屬性的錯誤。 yii\base\Model
getErrors() 傳回所有屬性或單一屬性的錯誤。 yii\base\Model
getFirstError() 傳回指定屬性的第一個錯誤。 yii\base\Model
getFirstErrors() 傳回模型中每個屬性的第一個錯誤。 yii\base\Model
getIterator() 傳回用於遍歷模型中屬性的迭代器。 yii\base\Model
getScenario() 傳回此模型使用的情境。 yii\base\Model
getValidators() 傳回在 rules() 中宣告的所有驗證器。 yii\base\Model
hasErrors() 傳回指示是否存在任何驗證錯誤的值。 yii\base\Model
hasEventHandlers() 傳回指示是否有名稱事件附加任何處理器的值。 yii\base\Component
hasMethod() 傳回指示是否已定義方法的值。 yii\base\Component
hasProperty() 傳回指示是否為此元件定義屬性的值。 yii\base\Component
init() 初始化物件。 yii\base\BaseObject
instance() 傳回靜態類別實例,可用於取得中繼資訊。 yii\base\StaticInstanceTrait
isAttributeActive() 傳回指示屬性在目前情境中是否為活動狀態的值。 yii\base\Model
isAttributeRequired() 傳回指示屬性是否為必要的值。 yii\base\Model
isAttributeSafe() 傳回指示屬性對於大量指派是否安全的值。 yii\base\Model
load() 使用輸入資料填入模型。 yii\base\Model
loadMultiple() 使用來自終端使用者的資料填入一組模型。 yii\base\Model
off() 從此元件分離現有的事件處理器。 yii\base\Component
offsetExists() 傳回在指定偏移量處是否存在元素。 yii\base\Model
offsetGet() 傳回指定偏移量處的元素。 yii\base\Model
offsetSet() 設定指定偏移量處的元素。 yii\base\Model
offsetUnset() 將指定偏移量處的元素值設定為 null。 yii\base\Model
on() 將事件處理器附加到事件。 yii\base\Component
onUnsafeAttribute() 當大量指派不安全的屬性時,會調用此方法。 yii\base\Model
rules() 傳回屬性的驗證規則。 yii\base\Model
safeAttributes() 傳回在目前情境中可安全地大量指派的屬性名稱。 yii\base\Model
scenarios() 傳回情境列表和對應的活動屬性。 yii\base\Model
setAttributes() 以大量方式設定屬性值。 yii\base\Model
setScenario() 設定模型的情境。 yii\base\Model
toArray() 將模型轉換為陣列。 yii\base\ArrayableTrait
trigger() 觸發事件。 yii\base\Component
validate() 執行資料驗證。 yii\base\Model
validateMultiple() 驗證多個模型。 yii\base\Model

保護方法

隱藏繼承的方法

方法 描述 定義於
extractFieldsFor() 從給定根欄位的欄位集合中提取巢狀欄位。巢狀欄位以點 (.) 分隔。例如:「item.id」。先前的範例會提取「id」。 yii\base\ArrayableTrait
extractRootFields() 從巢狀欄位中提取根欄位名稱。 yii\base\ArrayableTrait
resolveFields() 決定哪些欄位可以由 toArray() 傳回。 yii\base\ArrayableTrait

事件

隱藏繼承的事件

事件 類型 描述 定義於
EVENT_AFTER_VALIDATE yii\base\Event validate() 結束時引發的事件 yii\base\Model
EVENT_BEFORE_VALIDATE yii\base\ModelEvent validate() 開始時引發的事件。 yii\base\Model

常數

隱藏繼承的常數

常數 描述 定義於
SCENARIO_DEFAULT 'default' 預設情境的名稱。 yii\base\Model

屬性詳細資訊

隱藏繼承的屬性

$activeValidators 公開屬性

適用於目前$scenario 的驗證器。

$attributes 公開屬性

屬性值 (名稱 => 值)。

public array $attributes null
$errors 公開屬性

所有屬性或指定屬性的錯誤。如果沒有錯誤,則傳回空陣列。請參閱 getErrors() 以取得詳細描述。請注意,當傳回所有屬性的錯誤時,結果會是二維陣列,如下所示: `php [ 'username' => [ 'Username is required.', 'Username must contain only word characters.', ], 'email' => [ 'Email address is invalid.', ] ] `

public array $errors null
$firstErrors 公開屬性

第一個錯誤。陣列鍵是屬性名稱,陣列值是相應的錯誤訊息。如果沒有錯誤,將傳回空陣列。

public array $firstErrors null
$iterator 公開唯讀屬性

用於遍歷列表中項目的迭代器。

$scenario 公開屬性

此模型所處的情境。預設為 SCENARIO_DEFAULT

public string $scenario null
$validators 公開屬性

模型中宣告的所有驗證器。

方法詳細資訊

隱藏繼承的方法

__call() 公開方法

定義於: yii\base\Component::__call()

呼叫未定義為類別方法的具名方法。

此方法將檢查是否有任何附加的行為具有具名方法,並在可用時執行它。

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當調用未知方法時,將會隱式呼叫它。

public mixed __call ( $name, $params )
$name string

方法名稱

$params array

方法參數

return mixed

方法傳回值

throws yii\base\UnknownMethodException

當呼叫未知方法時

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() 公開方法

在透過複製現有物件建立物件後,會呼叫此方法。

它會移除所有行為,因為它們附加到舊物件。

public void __clone ( )

                public function __clone()
{
    parent::__clone();
    $this->_errors = null;
    $this->_validators = null;
}

            
__construct() 公開方法

定義於: yii\base\BaseObject::__construct()

建構子。

預設實作會執行兩件事

  • 使用給定的組態 $config 初始化物件。
  • 呼叫 init()

如果在子類別中覆寫此方法,建議

  • 建構子的最後一個參數是組態陣列,例如此處的 $config
  • 在建構子的結尾呼叫父類別實作。
public void __construct ( $config = [] )
$config array

將用於初始化物件屬性的名稱-值組

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() 公開方法

定義於: yii\base\Component::__get()

傳回元件屬性的值。

此方法將依以下順序檢查並相應地執行操作

  • getter 定義的屬性:傳回 getter 結果
  • 行為的屬性:傳回行為屬性值

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 $value = $component->property; 時,將會隱式呼叫它。

另請參閱 __set()

public mixed __get ( $name )
$name string

屬性名稱

return mixed

屬性值或行為屬性的值

throws yii\base\UnknownPropertyException

如果未定義屬性

throws yii\base\InvalidCallException

如果屬性為唯寫。

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() 公開方法

定義於: yii\base\Component::__isset()

檢查屬性是否已設定,即已定義且非 null。

此方法將依以下順序檢查並相應地執行操作

  • setter 定義的屬性:傳回屬性是否已設定
  • 行為的屬性:傳回屬性是否已設定
  • 對於不存在的屬性傳回 false

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 isset($component->property) 時,將會隱式呼叫它。

另請參閱 https://php.dev.org.tw/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

屬性名稱或事件名稱

return boolean

具名屬性是否已設定

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() 公開方法

定義於: yii\base\Component::__set()

設定元件屬性的值。

此方法將依以下順序檢查並相應地執行操作

  • setter 定義的屬性:設定屬性值
  • 格式為 "on xyz" 的事件:將處理器附加到事件 "xyz"
  • 格式為 "as xyz" 的行為:附加名為 "xyz" 的行為
  • 行為的屬性:設定行為屬性值

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 $component->property = $value; 時,將會隱式呼叫它。

另請參閱 __get()

public void __set ( $name, $value )
$name string

屬性名稱或事件名稱

$value mixed

屬性值

throws yii\base\UnknownPropertyException

如果未定義屬性

throws yii\base\InvalidCallException

如果屬性為唯讀。

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() 公開方法

定義於: yii\base\Component::__unset()

將元件屬性設定為 null。

此方法將依以下順序檢查並相應地執行操作

  • setter 定義的屬性:將屬性值設定為 null
  • 行為的屬性:將屬性值設定為 null

請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 unset($component->property) 時,將會隱式呼叫它。

另請參閱 https://php.dev.org.tw/manual/en/function.unset.php

public void __unset ( $name )
$name string

屬性名稱

throws yii\base\InvalidCallException

如果屬性為唯讀。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
activeAttributes() 公開方法

傳回在目前情境中受驗證約束的屬性名稱。

public string[] activeAttributes ( )
return string[]

安全屬性名稱

                public function activeAttributes()
{
    $scenario = $this->getScenario();
    $scenarios = $this->scenarios();
    if (!isset($scenarios[$scenario])) {
        return [];
    }
    $attributes = array_keys(array_flip($scenarios[$scenario]));
    foreach ($attributes as $i => $attribute) {
        if (strncmp($attribute, '!', 1) === 0) {
            $attributes[$i] = substr($attribute, 1);
        }
    }
    return $attributes;
}

            
addError() 公開方法

為指定的屬性新增新的錯誤。

public void addError ( $attribute, $error '' )
$attribute string

屬性名稱

$error string

新的錯誤訊息

                public function addError($attribute, $error = '')
{
    $this->_errors[$attribute][] = $error;
}

            
addErrors() 公開方法 (自版本 2.0.2 起可用)

新增錯誤列表。

public void addErrors ( array $items )
$items array

錯誤列表。陣列鍵必須是屬性名稱。陣列值應為錯誤訊息。如果屬性有多個錯誤,則這些錯誤必須以陣列的形式給出。您可以將 getErrors() 的結果用作此參數的值。

                public function addErrors(array $items)
{
    foreach ($items as $attribute => $errors) {
        if (is_array($errors)) {
            foreach ($errors as $error) {
                $this->addError($attribute, $error);
            }
        } else {
            $this->addError($attribute, $errors);
        }
    }
}

            
afterValidate() 公開方法

此方法在驗證結束後調用。

預設實作會引發 afterValidate 事件。您可以覆寫此方法以在驗證後執行後續處理。請確保調用父類別實作,以便可以引發事件。

public void afterValidate ( )

                public function afterValidate()
{
    $this->trigger(self::EVENT_AFTER_VALIDATE);
}

            
attachBehavior() 公開方法

定義於: yii\base\Component::attachBehavior()

將行為附加到此元件。

此方法將根據給定的組態建立行為物件。之後,將透過呼叫 yii\base\Behavior::attach() 方法將行為物件附加到此元件。

另請參閱 detachBehavior()

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

行為的名稱。

$behavior string|array|yii\base\Behavior

行為組態。這可以是以下其中之一

return yii\base\Behavior

行為物件

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() 公開方法

定義於: yii\base\Component::attachBehaviors()

將行為列表附加到元件。

每個行為都由其名稱索引,並且應該是 yii\base\Behavior 物件、指定行為類別的字串或用於建立行為的組態陣列。

另請參閱 attachBehavior()

public void attachBehaviors ( $behaviors )
$behaviors array

要附加到元件的行為列表

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
attributeHints() 公開方法 (自版本 2.0.4 起可用)

傳回屬性提示。

屬性提示主要用於顯示目的。例如,給定屬性 isPublic,我們可以宣告提示 Whether the post should be visible for not logged in users,它提供了屬性含義的使用者友善描述,並且可以顯示給終端使用者。

與標籤不同,如果省略其顯式宣告,則不會產生提示。

請注意,為了繼承在父類別中定義的提示,子類別需要使用諸如 array_merge() 之類的函數將父類別提示與子類別提示合併。

public array attributeHints ( )
return array

屬性提示 (名稱 => 提示)

                public function attributeHints()
{
    return [];
}

            
attributeLabels() public method

傳回屬性標籤。

屬性標籤主要用於顯示目的。例如,給定一個屬性 firstName,我們可以宣告一個標籤 First Name,這樣更方便使用者理解,並且可以顯示給終端使用者。

預設情況下,屬性標籤是使用 generateAttributeLabel() 產生的。此方法允許您明確指定屬性標籤。

請注意,為了繼承父類別中定義的標籤,子類別需要使用 array_merge() 等函數將父類別標籤與子類別標籤合併。

另請參閱 generateAttributeLabel()

public array attributeLabels ( )
return array

屬性標籤 (名稱 => 標籤)

                public function attributeLabels()
{
    return [];
}

            
attributes() public method

傳回屬性名稱的列表。

預設情況下,此方法會傳回類別的所有 public 非靜態屬性。您可以覆寫此方法以變更預設行為。

public string[] attributes ( )
return string[]

屬性名稱列表。

                public function attributes()
{
    $class = new ReflectionClass($this);
    $names = [];
    foreach ($class->getProperties(\ReflectionProperty::IS_PUBLIC) as $property) {
        if (!$property->isStatic()) {
            $names[] = $property->getName();
        }
    }
    return $names;
}

            
beforeValidate() public method

此方法在驗證開始前調用。

預設實作會引發 beforeValidate 事件。您可以覆寫此方法,在驗證之前執行初步檢查。請確保調用父類別實作,以便可以引發事件。

public boolean beforeValidate ( )
return boolean

是否應執行驗證。預設值為 true。如果傳回 false,驗證將停止,且模型會被視為無效。

                public function beforeValidate()
{
    $event = new ModelEvent();
    $this->trigger(self::EVENT_BEFORE_VALIDATE, $event);
    return $event->isValid;
}

            
behaviors() public method

定義於: yii\base\Component::behaviors()

傳回此元件應表現為的行為列表。

子類別可以覆寫此方法,以指定它們想要表現為的行為。

此方法的傳回值應為行為物件或組態的陣列,並以行為名稱作為索引。行為組態可以是指定行為類別的字串,或是具有以下結構的陣列

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

請注意,行為類別必須從 yii\base\Behavior 擴展。行為可以使用名稱或匿名方式附加。當使用名稱作為陣列鍵時,可以使用此名稱,稍後可以使用 getBehavior() 檢索行為,或使用 detachBehavior() 分離行為。匿名行為無法檢索或分離。

在此方法中宣告的行為將自動 (按需) 附加到元件。

public array behaviors ( )
return array

行為組態。

                public function behaviors()
{
    return [];
}

            
canGetProperty() public method

定義於: yii\base\Component::canGetProperty()

傳回指示是否可以讀取屬性的值。

如果符合以下條件,則可以讀取屬性:

  • 類別具有與指定名稱關聯的 getter 方法 (在這種情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數 (當 $checkVars 為 true 時);
  • 附加的行為具有給定名稱的可讀屬性 (當 $checkBehaviors 為 true 時)。

另請參閱 canSetProperty()

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

$checkBehaviors boolean

是否將行為的屬性視為此元件的屬性

return boolean

屬性是否可讀

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() public method

定義於: yii\base\Component::canSetProperty()

傳回指示是否可以設定屬性的值。

如果符合以下條件,則可以寫入屬性:

  • 類別具有與指定名稱關聯的 setter 方法 (在這種情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數 (當 $checkVars 為 true 時);
  • 附加的行為具有給定名稱的可寫入屬性 (當 $checkBehaviors 為 true 時)。

另請參閱 canGetProperty()

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

$checkBehaviors boolean

是否將行為的屬性視為此元件的屬性

return boolean

屬性是否可寫入

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
className() public static method
自 2.0.14 版本起已棄用。在 PHP >=5.5 上,請改用 ::class

定義於: yii\base\BaseObject::className()

傳回此類別的完整限定名稱。

public static string className ( )
return string

此類別的完整名稱。

                public static function className()
{
    return get_called_class();
}

            
clearErrors() public method

移除所有屬性或單一屬性的錯誤。

public void clearErrors ( $attribute null )
$attribute string|null

屬性名稱。使用 null 移除所有屬性的錯誤。

                public function clearErrors($attribute = null)
{
    if ($attribute === null) {
        $this->_errors = [];
    } else {
        unset($this->_errors[$attribute]);
    }
}

            
createValidators() public method

根據 rules() 中指定的驗證規則建立驗證器物件。

getValidators() 不同,每次調用此方法時,都會傳回新的驗證器列表。

public ArrayObject createValidators ( )
return ArrayObject

驗證器

throws yii\base\InvalidConfigException

如果任何驗證規則組態無效

                public function createValidators()
{
    $validators = new ArrayObject();
    foreach ($this->rules() as $rule) {
        if ($rule instanceof Validator) {
            $validators->append($rule);
        } elseif (is_array($rule) && isset($rule[0], $rule[1])) { // attributes, validator type
            $validator = Validator::createValidator($rule[1], $this, (array) $rule[0], array_slice($rule, 2));
            $validators->append($validator);
        } else {
            throw new InvalidConfigException('Invalid validation rule: a rule must specify both attribute names and validator type.');
        }
    }
    return $validators;
}

            
detachBehavior() public method

定義於: yii\base\Component::detachBehavior()

從元件中分離行為。

將調用行為的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name string

行為的名稱。

return yii\base\Behavior|null

分離的行為。如果行為不存在,則為 Null。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() public method

定義於: yii\base\Component::detachBehaviors()

從元件中分離所有行為。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() public method

定義於: yii\base\Component::ensureBehaviors()

確保在 behaviors() 中宣告的行為已附加到此元件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
extraFields() public method

定義於: yii\base\ArrayableTrait::extraFields()

傳回可以進一步擴展並由 toArray() 傳回的欄位列表。

此方法與 fields() 類似,不同之處在於此方法傳回的欄位列表預設不會由 toArray() 傳回。只有在呼叫 toArray() 時明確指定要展開的欄位名稱,它們的值才會被匯出。

預設實作會傳回空陣列。

您可以覆寫此方法,以根據某些上下文資訊 (例如,當前應用程式使用者) 傳回可展開欄位的列表。

另請參閱

public array extraFields ( )
return array

可展開的欄位名稱或欄位定義的列表。請參閱 fields(),了解傳回值的格式。

                public function extraFields()
{
    return [];
}

            
extractFieldsFor() protected method (available since version 2.0.14)

定義於: yii\base\ArrayableTrait::extractFieldsFor()

從給定根欄位的欄位集合中提取巢狀欄位。巢狀欄位以點 (.) 分隔。例如:「item.id」。先前的範例會提取「id」。

protected array extractFieldsFor ( array $fields, $rootField )
$fields array

請求提取的欄位

$rootField string

我們要為其提取巢狀欄位的根欄位

return array

為給定欄位提取的巢狀欄位

                protected function extractFieldsFor(array $fields, $rootField)
{
    $result = [];
    foreach ($fields as $field) {
        if (0 === strpos($field, "{$rootField}.")) {
            $result[] = preg_replace('/^' . preg_quote($rootField, '/') . '\./i', '', $field);
        }
    }
    return array_unique($result);
}

            
extractRootFields() protected method (available since version 2.0.14)

定義於: yii\base\ArrayableTrait::extractRootFields()

從巢狀欄位中提取根欄位名稱。

巢狀欄位以點 (.) 分隔。例如:"item.id" 前面的範例會提取 "item"。

protected array extractRootFields ( array $fields )
$fields array

請求提取的欄位

return array

從給定的巢狀欄位提取的根欄位

                protected function extractRootFields(array $fields)
{
    $result = [];
    foreach ($fields as $field) {
        $result[] = current(explode('.', $field, 2));
    }
    if (in_array('*', $result, true)) {
        $result = [];
    }
    return array_unique($result);
}

            
fields() public method

傳回當未指定特定欄位時,預設應由 toArray() 傳回的欄位列表。

欄位是由 toArray() 傳回的陣列中的具名元素。

此方法應傳回欄位名稱或欄位定義的陣列。如果是前者,欄位名稱將被視為物件屬性名稱,其值將用作欄位值。如果是後者,陣列鍵應為欄位名稱,而陣列值應為對應的欄位定義,它可以是物件屬性名稱,也可以是傳回對應欄位值的 PHP 可呼叫物件。可呼叫物件的簽名應為

function ($model, $field) {
    // return field value
}

例如,以下程式碼宣告了四個欄位

  • email:欄位名稱與屬性名稱 email 相同;
  • firstNamelastName:欄位名稱為 firstNamelastName,它們的值是從 first_namelast_name 屬性取得的;
  • fullName:欄位名稱為 fullName。其值是透過串連 first_namelast_name 取得的。
return [
    'email',
    'firstName' => 'first_name',
    'lastName' => 'last_name',
    'fullName' => function ($model) {
        return $model->first_name . ' ' . $model->last_name;
    },
];

在此方法中,您可能還想要根據某些上下文資訊傳回不同的欄位列表。例如,根據 $scenario 或當前應用程式使用者的權限,您可以傳回不同的可見欄位集或篩選掉某些欄位。

此方法的預設實作會傳回由相同屬性名稱索引的 attributes()

另請參閱 toArray()

public array fields ( )
return array

欄位名稱或欄位定義的列表。

                public function fields()
{
    $fields = $this->attributes();
    return array_combine($fields, $fields);
}

            
formName() public method

傳回此模型類別應使用的表單名稱。

表單名稱主要由 yii\widgets\ActiveForm 使用,以決定如何命名模型中屬性的輸入欄位。如果表單名稱為 "A",且屬性名稱為 "b",則對應的輸入名稱將為 "A[b]"。如果表單名稱為空字串,則輸入名稱將為 "b"。

上述命名架構的目的是,對於包含多個不同模型的表單,每個模型的屬性都分組在 POST 資料的子陣列中,並且更容易區分它們。

預設情況下,此方法會傳回模型類別名稱 (不含命名空間部分) 作為表單名稱。當模型用於不同表單時,您可以覆寫它。

另請參閱 load()

public string formName ( )
return string

此模型類別的表單名稱。

throws yii\base\InvalidConfigException

當表單使用匿名類別定義且未覆寫 formName() 方法時。

                public function formName()
{
    $reflector = new ReflectionClass($this);
    if (PHP_VERSION_ID >= 70000 && $reflector->isAnonymous()) {
        throw new InvalidConfigException('The "formName()" method should be explicitly defined for anonymous models');
    }
    return $reflector->getShortName();
}

            
generateAttributeLabel() public method

根據給定的屬性名稱產生使用者友善的屬性標籤。

這是透過將底線、破折號和點替換為空格,並將每個單字的第一個字母更改為大寫來完成的。例如,'department_name' 或 'DepartmentName' 將產生 'Department Name'。

public string generateAttributeLabel ( $name )
$name string

欄位名稱

return string

屬性標籤

                public function generateAttributeLabel($name)
{
    return Inflector::camel2words($name, true);
}

            
getActiveValidators() public method

傳回適用於目前 $scenario 的驗證器。

public yii\validators\Validator[] getActiveValidators ( $attribute null )
$attribute string|null

應傳回其適用驗證器的屬性名稱。如果此值為 null,則將傳回模型中所有屬性的驗證器。

return yii\validators\Validator[]

適用於目前$scenario 的驗證器。

                public function getActiveValidators($attribute = null)
{
    $activeAttributes = $this->activeAttributes();
    if ($attribute !== null && !in_array($attribute, $activeAttributes, true)) {
        return [];
    }
    $scenario = $this->getScenario();
    $validators = [];
    foreach ($this->getValidators() as $validator) {
        if ($attribute === null) {
            $validatorAttributes = $validator->getValidationAttributes($activeAttributes);
            $attributeValid = !empty($validatorAttributes);
        } else {
            $attributeValid = in_array($attribute, $validator->getValidationAttributes($attribute), true);
        }
        if ($attributeValid && $validator->isActive($scenario)) {
            $validators[] = $validator;
        }
    }
    return $validators;
}

            
getAttributeHint() public method (available since version 2.0.4)

傳回指定屬性的文字提示。

另請參閱 attributeHints()

public string getAttributeHint ( $attribute )
$attribute string

屬性名稱

return string

屬性提示

                public function getAttributeHint($attribute)
{
    $hints = $this->attributeHints();
    return isset($hints[$attribute]) ? $hints[$attribute] : '';
}

            
getAttributeLabel() public method

傳回指定屬性的文字標籤。

另請參閱

public string getAttributeLabel ( $attribute )
$attribute string

屬性名稱

return string

屬性標籤

                public function getAttributeLabel($attribute)
{
    $labels = $this->attributeLabels();
    return isset($labels[$attribute]) ? $labels[$attribute] : $this->generateAttributeLabel($attribute);
}

            
getAttributes() public method

傳回屬性值。

public array getAttributes ( $names null, $except = [] )
$names array|null

需要傳回其值的屬性列表。預設值為 null,表示將傳回 attributes() 中列出的所有屬性。如果它是陣列,則只會傳回陣列中的屬性。

$except array

不應傳回其值的屬性列表。

return array

屬性值 (名稱 => 值)。

                public function getAttributes($names = null, $except = [])
{
    $values = [];
    if ($names === null) {
        $names = $this->attributes();
    }
    foreach ($names as $name) {
        $values[$name] = $this->$name;
    }
    foreach ($except as $name) {
        unset($values[$name]);
    }
    return $values;
}

            
getBehavior() public method

定義於: yii\base\Component::getBehavior()

傳回具名行為物件。

public yii\base\Behavior|null getBehavior ( $name )
$name string

行為名稱

return yii\base\Behavior|null

行為物件,如果行為不存在,則為 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() public method

定義於: yii\base\Component::getBehaviors()

傳回附加到此元件的所有行為。

public yii\base\Behavior[] getBehaviors ( )
return yii\base\Behavior[]

附加到此元件的行為列表

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getErrorSummary() 公開方法 (自版本 2.0.14 起可用)

以一維陣列形式傳回所有屬性的錯誤。

另請參閱

public array getErrorSummary ( $showAllErrors )
$showAllErrors boolean

布林值,若設為 true,則會顯示每個屬性的所有錯誤訊息,否則只會顯示每個屬性的第一個錯誤訊息。

return array

所有屬性的錯誤,以一維陣列形式呈現。若無錯誤,則返回空陣列。

                public function getErrorSummary($showAllErrors)
{
    $lines = [];
    $errors = $showAllErrors ? $this->getErrors() : $this->getFirstErrors();
    foreach ($errors as $es) {
        $lines = array_merge($lines, (array)$es);
    }
    return $lines;
}

            
getErrors() 公開方法

傳回所有屬性或單一屬性的錯誤。

另請參閱

public array getErrors ( $attribute null )
$attribute string|null

屬性名稱。使用 null 以檢索所有屬性的錯誤。

return array

所有屬性或指定屬性的錯誤。若無錯誤,則返回空陣列。詳細描述請參閱 getErrors()。請注意,當返回所有屬性的錯誤時,結果會是二維陣列,如下所示

[
    'username' => [
        'Username is required.',
        'Username must contain only word characters.',
    ],
    'email' => [
        'Email address is invalid.',
    ]
]

                public function getErrors($attribute = null)
{
    if ($attribute === null) {
        return $this->_errors === null ? [] : $this->_errors;
    }
    return isset($this->_errors[$attribute]) ? $this->_errors[$attribute] : [];
}

            
getFirstError() 公開方法

傳回指定屬性的第一個錯誤。

另請參閱

public string|null getFirstError ( $attribute )
$attribute string

屬性名稱。

return string|null

錯誤訊息。若無錯誤,則返回 Null。

                public function getFirstError($attribute)
{
    return isset($this->_errors[$attribute]) ? reset($this->_errors[$attribute]) : null;
}

            
getFirstErrors() 公開方法

傳回模型中每個屬性的第一個錯誤。

另請參閱

public array getFirstErrors ( )
return array

第一個錯誤。陣列鍵是屬性名稱,陣列值是相應的錯誤訊息。如果沒有錯誤,將傳回空陣列。

                public function getFirstErrors()
{
    if (empty($this->_errors)) {
        return [];
    }
    $errors = [];
    foreach ($this->_errors as $name => $es) {
        if (!empty($es)) {
            $errors[$name] = reset($es);
        }
    }
    return $errors;
}

            
getIterator() 公開方法

傳回用於遍歷模型中屬性的迭代器。

此方法為介面 IteratorAggregate 所需。

public ArrayIterator getIterator ( )
return ArrayIterator

用於遍歷列表中項目的迭代器。

                #[\ReturnTypeWillChange]
public function getIterator()
{
    $attributes = $this->getAttributes();
    return new ArrayIterator($attributes);
}

            
getScenario() 公開方法

傳回此模型使用的情境。

情境 (Scenario) 影響驗證的執行方式以及哪些屬性可以大量賦值。

public string getScenario ( )
return string

此模型所處的情境。預設為 SCENARIO_DEFAULT

                public function getScenario()
{
    return $this->_scenario;
}

            
getValidators() 公開方法

傳回在 rules() 中宣告的所有驗證器。

此方法與 getActiveValidators() 的不同之處在於,後者僅返回適用於當前 $scenario 的驗證器。

由於此方法返回 ArrayObject 物件,您可以透過插入或移除驗證器來操作它(在模型行為中很有用)。例如,

$model->validators[] = $newValidator;
public ArrayObject|yii\validators\Validator[] getValidators ( )
return ArrayObject|yii\validators\Validator[]

模型中宣告的所有驗證器。

                public function getValidators()
{
    if ($this->_validators === null) {
        $this->_validators = $this->createValidators();
    }
    return $this->_validators;
}

            
hasErrors() 公開方法

傳回指示是否存在任何驗證錯誤的值。

public boolean hasErrors ( $attribute null )
$attribute string|null

屬性名稱。使用 null 以檢查所有屬性。

return boolean

是否有任何錯誤。

                public function hasErrors($attribute = null)
{
    return $attribute === null ? !empty($this->_errors) : isset($this->_errors[$attribute]);
}

            
hasEventHandlers() 公開方法

定義於: yii\base\Component::hasEventHandlers()

傳回指示是否有名稱事件附加任何處理器的值。

public boolean hasEventHandlers ( $name )
$name string

事件名稱

return boolean

是否有任何處理器附加到事件。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() 公開方法

定義於: yii\base\Component::hasMethod()

傳回指示是否已定義方法的值。

方法被定義如果

  • 類別具有指定名稱的方法
  • 附加的行為具有給定名稱的方法(當 $checkBehaviors 為 true 時)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

屬性名稱

$checkBehaviors boolean

是否將行為的方法視為此組件的方法

return boolean

方法是否被定義

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() 公開方法

定義於: yii\base\Component::hasProperty()

傳回指示是否為此元件定義屬性的值。

屬性被定義如果

  • 類別具有與指定名稱相關聯的 getter 或 setter 方法(在這種情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數 (當 $checkVars 為 true 時);
  • 附加的行為具有給定名稱的屬性(當 $checkBehaviors 為 true 時)。

另請參閱

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

$checkBehaviors boolean

是否將行為的屬性視為此元件的屬性

return boolean

屬性是否被定義

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
init() 公開方法

定義於: yii\base\BaseObject::init()

初始化物件。

在物件以給定的配置初始化後,此方法會在建構函式的結尾被調用。

public void init ( )

                public function init()
{
}

            
instance() public static method

定義於: yii\base\StaticInstanceTrait::instance()

傳回靜態類別實例,可用於取得中繼資訊。

public static static instance ( $refresh false )
$refresh boolean

是否重新建立靜態實例,即使它已經被快取。

return yii\base\Model

類別實例。

                public static function instance($refresh = false)
{
    $className = get_called_class();
    if ($refresh || !isset(self::$_instances[$className])) {
        self::$_instances[$className] = Yii::createObject($className);
    }
    return self::$_instances[$className];
}

            
isAttributeActive() 公開方法

傳回指示屬性在目前情境中是否為活動狀態的值。

另請參閱 activeAttributes()

public boolean isAttributeActive ( $attribute )
$attribute string

屬性名稱

return boolean

屬性在目前情境中是否為啟用狀態

                public function isAttributeActive($attribute)
{
    return in_array($attribute, $this->activeAttributes(), true);
}

            
isAttributeRequired() 公開方法

傳回指示屬性是否為必要的值。

這透過檢查屬性是否與當前 $scenario 中的 required 驗證規則相關聯來確定。

請注意,當驗證器使用 $when 應用條件驗證時,此方法將返回 false,而無論 when 條件如何,因為它可能會在模型載入資料之前被調用。

public boolean isAttributeRequired ( $attribute )
$attribute string

屬性名稱

return boolean

屬性是否為必填

                public function isAttributeRequired($attribute)
{
    foreach ($this->getActiveValidators($attribute) as $validator) {
        if ($validator instanceof RequiredValidator && $validator->when === null) {
            return true;
        }
    }
    return false;
}

            
isAttributeSafe() 公開方法

傳回指示屬性對於大量指派是否安全的值。

另請參閱 safeAttributes()

public boolean isAttributeSafe ( $attribute )
$attribute string

屬性名稱

return boolean

屬性對於大量賦值是否安全

                public function isAttributeSafe($attribute)
{
    return in_array($attribute, $this->safeAttributes(), true);
}

            
load() 公開方法

使用輸入資料填入模型。

此方法提供了一個方便的快捷方式,用於

if (isset($_POST['FormName'])) {
    $model->attributes = $_POST['FormName'];
    if ($model->save()) {
        // handle success
    }
}

使用 load() 可以寫成

if ($model->load($_POST) && $model->save()) {
    // handle success
}

load() 從模型的 formName() 方法(您可以覆蓋)取得 'FormName',除非給定了 $formName 參數。如果表單名稱為空,load() 會使用整個 $data 填充模型,而不是 $data['FormName']

請注意,正在填充的資料會受到 setAttributes() 的安全檢查。

public boolean load ( $data, $formName null )
$data array

要載入的資料陣列,通常是 $_POST$_GET

$formName string|null

用於將資料載入模型的表單名稱,不使用表單時為空字串。如果未設定,則使用 formName()

return boolean

load() 是否在 $data 中找到預期的表單。

                public function load($data, $formName = null)
{
    $scope = $formName === null ? $this->formName() : $formName;
    if ($scope === '' && !empty($data)) {
        $this->setAttributes($data);
        return true;
    } elseif (isset($data[$scope])) {
        $this->setAttributes($data[$scope]);
        return true;
    }
    return false;
}

            
loadMultiple() public static method

使用來自終端使用者的資料填入一組模型。

此方法主要用於收集表格資料輸入。每個模型要載入的資料是 $data[formName][index],其中 formName 指的是 formName() 的值,而 index$models 陣列中模型的索引。如果 formName() 為空,則會使用 $data[index] 來填充每個模型。填充到每個模型的資料會受到 setAttributes() 的安全檢查。

public static boolean loadMultiple ( $models, $data, $formName null )
$models array

要填充的模型。請注意,所有模型應具有相同的類別。

$data array

資料陣列。這通常是 $_POST$_GET,但也可以是終端使用者提供的任何有效陣列。

$formName string|null

用於將資料載入模型中的表單名稱。如果未設定,它將使用 $models 中第一個模型的 formName() 值。此參數自版本 2.0.1 起可用。

return boolean

是否至少有一個模型成功填充。

                public static function loadMultiple($models, $data, $formName = null)
{
    if ($formName === null) {
        /* @var $first Model|false */
        $first = reset($models);
        if ($first === false) {
            return false;
        }
        $formName = $first->formName();
    }
    $success = false;
    foreach ($models as $i => $model) {
        /* @var $model Model */
        if ($formName == '') {
            if (!empty($data[$i]) && $model->load($data[$i], '')) {
                $success = true;
            }
        } elseif (!empty($data[$formName][$i]) && $model->load($data[$formName][$i], '')) {
            $success = true;
        }
    }
    return $success;
}

            
off() 公開方法

定義於: yii\base\Component::off()

從此元件分離現有的事件處理器。

此方法與 on() 相反。

注意:如果為事件名稱傳遞了萬用字元模式,則只會移除使用此萬用字元註冊的處理器,而使用與此萬用字元匹配的純名稱註冊的處理器將保留。

另請參閱 on()

public boolean off ( $name, $handler null )
$name string

事件名稱

$handler callable|null

要移除的事件處理器。如果為 null,則會移除附加到已命名事件的所有處理器。

return boolean

如果找到並分離處理器

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
offsetExists() 公開方法

傳回在指定偏移量處是否存在元素。

此方法為 SPL 介面 ArrayAccess 所需。當您使用類似 isset($model[$offset]) 的語法時,會隱式調用它。

public boolean offsetExists ( $offset )
$offset string

要檢查的偏移量。

return boolean

偏移量是否存在。

                #[\ReturnTypeWillChange]
public function offsetExists($offset)
{
    return isset($this->$offset);
}

            
offsetGet() 公開方法

傳回指定偏移量處的元素。

此方法為 SPL 介面 ArrayAccess 所需。當您使用類似 $value = $model[$offset]; 的語法時,會隱式調用它。

public mixed offsetGet ( $offset )
$offset string

要檢索元素的偏移量。

return mixed

偏移量處的元素,如果在偏移量處找不到元素,則為 null

                #[\ReturnTypeWillChange]
public function offsetGet($offset)
{
    return $this->$offset;
}

            
offsetSet() 公開方法

設定指定偏移量處的元素。

此方法為 SPL 介面 ArrayAccess 所需。當您使用類似 $model[$offset] = $value; 的語法時,會隱式調用它。

public void offsetSet ( $offset, $value )
$offset string

要設定元素的偏移量

$value mixed

元素值

                #[\ReturnTypeWillChange]
public function offsetSet($offset, $value)
{
    $this->$offset = $value;
}

            
offsetUnset() 公開方法

將指定偏移量處的元素值設定為 null。

此方法為 SPL 介面 ArrayAccess 所需。當您使用類似 unset($model[$offset]) 的語法時,會隱式調用它。

public void offsetUnset ( $offset )
$offset string

要取消設定元素的偏移量

                #[\ReturnTypeWillChange]
public function offsetUnset($offset)
{
    $this->$offset = null;
}

            
on() 公開方法

定義於: yii\base\Component::on()

將事件處理器附加到事件。

事件處理器必須是有效的 PHP 回呼。以下是一些範例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件處理器必須使用以下簽章定義:

function ($event)

其中 $event 是一個 yii\base\Event 物件,其中包含與事件相關聯的參數。

自 2.0.14 版本起,您可以將事件名稱指定為萬用字元模式

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另請參閱 off()

public void on ( $name, $handler, $data null, $append true )
$name string

事件名稱

$handler callable

事件處理器

$data mixed

事件觸發時要傳遞給事件處理器的資料。當調用事件處理器時,可以透過 yii\base\Event::$data 存取此資料。

$append boolean

是否將新的事件處理器附加到現有處理器列表的末尾。如果為 false,則新處理器將插入到現有處理器列表的開頭。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
onUnsafeAttribute() 公開方法

當大量指派不安全的屬性時,會調用此方法。

如果 YII_DEBUG 開啟,預設實作將記錄警告訊息。否則它不會執行任何操作。

public void onUnsafeAttribute ( $name, $value )
$name string

不安全屬性名稱

$value mixed

屬性值

                public function onUnsafeAttribute($name, $value)
{
    if (YII_DEBUG) {
        Yii::debug("Failed to set unsafe attribute '$name' in '" . get_class($this) . "'.", __METHOD__);
    }
}

            
resolveFields() protected method

定義於: yii\base\ArrayableTrait::resolveFields()

決定哪些欄位可以由 toArray() 傳回。

此方法將首先從給定的欄位中提取根欄位。然後,它將根據 fields()extraFields() 中宣告的根欄位檢查請求的根欄位,以確定可以返回哪些欄位。

protected array resolveFields ( array $fields, array $expand )
$fields array

請求匯出的欄位

$expand array

請求匯出的額外欄位

return array

要匯出的欄位列表。陣列鍵是欄位名稱,陣列值是相應的物件屬性名稱或返回欄位值的 PHP 可調用物件。

                protected function resolveFields(array $fields, array $expand)
{
    $fields = $this->extractRootFields($fields);
    $expand = $this->extractRootFields($expand);
    $result = [];
    foreach ($this->fields() as $field => $definition) {
        if (is_int($field)) {
            $field = $definition;
        }
        if (empty($fields) || in_array($field, $fields, true)) {
            $result[$field] = $definition;
        }
    }
    if (empty($expand)) {
        return $result;
    }
    foreach ($this->extraFields() as $field => $definition) {
        if (is_int($field)) {
            $field = $definition;
        }
        if (in_array($field, $expand, true)) {
            $result[$field] = $definition;
        }
    }
    return $result;
}

            
rules() 公開方法

傳回屬性的驗證規則。

驗證規則由 validate() 使用,以檢查屬性值是否有效。子類別可以覆寫此方法以宣告不同的驗證規則。

每個規則都是一個具有以下結構的陣列

[
    ['attribute1', 'attribute2'],
    'validator type',
    'on' => ['scenario1', 'scenario2'],
    //...other parameters...
]

其中

  • 屬性列表:required,指定要驗證的屬性陣列,對於單個屬性,您可以傳遞字串;
  • 驗證器類型:required,指定要使用的驗證器。它可以是內建驗證器名稱、模型類別的方法名稱、匿名函數或驗證器類別名稱。
  • on:optional,指定可以應用驗證規則的 情境 陣列。如果未設定此選項,則規則將適用於所有情境。
  • 可以指定其他名稱-值對,以初始化相應的驗證器屬性。有關可能的屬性,請參閱個別驗證器類別 API。

驗證器可以是擴展 yii\validators\Validator 的類別的物件,也可以是具有以下簽章的模型類別方法(稱為內聯驗證器

// $params refers to validation parameters given in the rule
function validatorName($attribute, $params)

在上面的程式碼中,$attribute 指的是目前正在驗證的屬性,而 $params 包含驗證器配置選項的陣列,例如 string 驗證器的 max。目前正在驗證的屬性值可以透過 $this->$attribute 存取。請注意 attribute 前面的 $;這會取得變數 $attribute 的值,並將其用作要存取的屬性的名稱。

Yii 也提供了一組 內建驗證器。每個驗證器都有一個別名,可用於指定驗證規則。

以下是一些範例

[
    // built-in "required" validator
    [['username', 'password'], 'required'],
    // built-in "string" validator customized with "min" and "max" properties
    ['username', 'string', 'min' => 3, 'max' => 12],
    // built-in "compare" validator that is used in "register" scenario only
    ['password', 'compare', 'compareAttribute' => 'password2', 'on' => 'register'],
    // an inline validator defined via the "authenticate()" method in the model class
    ['password', 'authenticate', 'on' => 'login'],
    // a validator of class "DateRangeValidator"
    ['dateRange', 'DateRangeValidator'],
];

請注意,為了繼承父類別中定義的規則,子類別需要使用諸如 array_merge() 之類的函數將父規則與子規則合併。

另請參閱 scenarios()

public array rules ( )
return array

驗證規則

                public function rules()
{
    return [];
}

            
safeAttributes() 公開方法

傳回在目前情境中可安全地大量指派的屬性名稱。

public string[] safeAttributes ( )
return string[]

安全屬性名稱

                public function safeAttributes()
{
    $scenario = $this->getScenario();
    $scenarios = $this->scenarios();
    if (!isset($scenarios[$scenario])) {
        return [];
    }
    $attributes = [];
    foreach ($scenarios[$scenario] as $attribute) {
        if (
            $attribute !== ''
            && strncmp($attribute, '!', 1) !== 0
            && !in_array('!' . $attribute, $scenarios[$scenario])
        ) {
            $attributes[] = $attribute;
        }
    }
    return $attributes;
}

            
scenarios() 公開方法

傳回情境列表和對應的活動屬性。

作用中屬性是指在目前情境中需要驗證的屬性。 傳回的陣列應採用以下格式

[
    'scenario1' => ['attribute11', 'attribute12', ...],
    'scenario2' => ['attribute21', 'attribute22', ...],
    ...
]

預設情況下,作用中屬性被視為安全且可以大量賦值。 如果屬性不應大量賦值(因此被視為不安全),請在屬性前加上驚嘆號字元 (例如 '!rank')。

此方法的預設實作將傳回在 rules() 宣告中找到的所有情境。 名為 SCENARIO_DEFAULT 的特殊情境將包含在 rules() 中找到的所有屬性。 每個情境都將與適用於該情境的驗證規則正在驗證的屬性相關聯。

public array scenarios ( )
return array

情境列表以及對應的作用中屬性。

                public function scenarios()
{
    $scenarios = [self::SCENARIO_DEFAULT => []];
    foreach ($this->getValidators() as $validator) {
        foreach ($validator->on as $scenario) {
            $scenarios[$scenario] = [];
        }
        foreach ($validator->except as $scenario) {
            $scenarios[$scenario] = [];
        }
    }
    $names = array_keys($scenarios);
    foreach ($this->getValidators() as $validator) {
        if (empty($validator->on) && empty($validator->except)) {
            foreach ($names as $name) {
                foreach ($validator->attributes as $attribute) {
                    $scenarios[$name][$attribute] = true;
                }
            }
        } elseif (empty($validator->on)) {
            foreach ($names as $name) {
                if (!in_array($name, $validator->except, true)) {
                    foreach ($validator->attributes as $attribute) {
                        $scenarios[$name][$attribute] = true;
                    }
                }
            }
        } else {
            foreach ($validator->on as $name) {
                foreach ($validator->attributes as $attribute) {
                    $scenarios[$name][$attribute] = true;
                }
            }
        }
    }
    foreach ($scenarios as $scenario => $attributes) {
        if (!empty($attributes)) {
            $scenarios[$scenario] = array_keys($attributes);
        }
    }
    return $scenarios;
}

            
setAttributes() 公開方法

以大量方式設定屬性值。

另請參閱

public void setAttributes ( $values, $safeOnly true )
$values array

要指派給模型的屬性值 (名稱 => 值)。

$safeOnly boolean

是否應僅對安全屬性進行指派。 安全屬性是指與目前 $scenario 中的驗證規則相關聯的屬性。

                public function setAttributes($values, $safeOnly = true)
{
    if (is_array($values)) {
        $attributes = array_flip($safeOnly ? $this->safeAttributes() : $this->attributes());
        foreach ($values as $name => $value) {
            if (isset($attributes[$name])) {
                $this->$name = $value;
            } elseif ($safeOnly) {
                $this->onUnsafeAttribute($name, $value);
            }
        }
    }
}

            
setScenario() 公開方法

設定模型的情境。

請注意,此方法不會檢查情境是否存在。 validate() 方法將執行此檢查。

public void setScenario ( $value )
$value string

此模型所處的情境。

                public function setScenario($value)
{
    $this->_scenario = $value;
}

            
toArray() 公開方法

定義於: yii\base\ArrayableTrait::toArray()

將模型轉換為陣列。

此方法將首先透過呼叫 resolveFields() 來識別要包含在結果陣列中的欄位。 然後它將模型轉換為包含這些欄位的陣列。 如果 $recursive 為 true,則任何嵌入的物件也將轉換為陣列。 當嵌入的物件為 yii\base\Arrayable 時,它們各自的巢狀欄位將被提取並傳遞給 toArray()

如果模型實作了 yii\web\Linkable 介面,則結果陣列也將具有一個 _link 元素,該元素引用介面指定的連結列表。

public array toArray ( array $fields = [], array $expand = [], $recursive true )
$fields array

請求的欄位。 如果為空或包含 '*',則將傳回 fields() 指定的所有欄位。 欄位可以是巢狀的,以點 (.) 分隔。 例如:item.field.sub-field 必須將 $recursive 設為 true 才能提取巢狀欄位。 如果 $recursive 為 false,則僅會提取根欄位。

$expand array

請求匯出的額外欄位。 僅考慮在 extraFields() 中宣告的欄位。 Expand 也可以是巢狀的,以點 (.) 分隔。 例如:item.expand1.expand2 必須將 $recursive 設為 true 才能提取巢狀 expand。 如果 $recursive 為 false,則僅會提取根 expand。

$recursive boolean

是否遞迴傳回嵌入物件的陣列表示。

return array

物件的陣列表示

                public function toArray(array $fields = [], array $expand = [], $recursive = true)
{
    $data = [];
    foreach ($this->resolveFields($fields, $expand) as $field => $definition) {
        $attribute = is_string($definition) ? $this->$definition : $definition($this, $field);
        if ($recursive) {
            $nestedFields = $this->extractFieldsFor($fields, $field);
            $nestedExpand = $this->extractFieldsFor($expand, $field);
            if ($attribute instanceof Arrayable) {
                $attribute = $attribute->toArray($nestedFields, $nestedExpand);
            } elseif ($attribute instanceof \JsonSerializable) {
                $attribute = $attribute->jsonSerialize();
            } elseif (is_array($attribute)) {
                $attribute = array_map(
                    function ($item) use ($nestedFields, $nestedExpand) {
                        if ($item instanceof Arrayable) {
                            return $item->toArray($nestedFields, $nestedExpand);
                        } elseif ($item instanceof \JsonSerializable) {
                            return $item->jsonSerialize();
                        }
                        return $item;
                    },
                    $attribute
                );
            }
        }
        $data[$field] = $attribute;
    }
    if ($this instanceof Linkable) {
        $data['_links'] = Link::serialize($this->getLinks());
    }
    return $recursive ? ArrayHelper::toArray($data) : $data;
}

            
trigger() 公開方法

定義於: yii\base\Component::trigger()

觸發事件。

此方法表示事件的發生。 它會調用事件的所有附加處理常式,包括類別層級的處理常式。

public void trigger ( $name, yii\base\Event $event null )
$name string

事件名稱

$event yii\base\Event|null

事件實例。 如果未設定,將建立預設的 yii\base\Event 物件。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}

            
validate() 公開方法

執行資料驗證。

此方法會執行適用於目前 $scenario 的驗證規則。 以下準則用於判斷規則目前是否適用

  • 規則必須與目前情境相關的屬性相關聯;
  • 規則必須對目前情境有效。

此方法將在實際驗證之前和之後分別呼叫 beforeValidate()afterValidate()。 如果 beforeValidate() 傳回 false,則驗證將被取消,且不會呼叫 afterValidate()

驗證期間發現的錯誤可以透過 getErrors()getFirstErrors()getFirstError() 取得。

public boolean validate ( $attributeNames null, $clearErrors true )
$attributeNames string[]|string|null

應該驗證的屬性名稱或屬性名稱列表。 如果此參數為空,則表示應驗證適用驗證規則中列出的任何屬性。

$clearErrors boolean

是否在執行驗證之前呼叫 clearErrors()

return boolean

驗證是否成功且沒有任何錯誤。

throws yii\base\InvalidArgumentException

如果目前情境未知。

                public function validate($attributeNames = null, $clearErrors = true)
{
    if ($clearErrors) {
        $this->clearErrors();
    }
    if (!$this->beforeValidate()) {
        return false;
    }
    $scenarios = $this->scenarios();
    $scenario = $this->getScenario();
    if (!isset($scenarios[$scenario])) {
        throw new InvalidArgumentException("Unknown scenario: $scenario");
    }
    if ($attributeNames === null) {
        $attributeNames = $this->activeAttributes();
    }
    $attributeNames = (array)$attributeNames;
    foreach ($this->getActiveValidators() as $validator) {
        $validator->validateAttributes($this, $attributeNames);
    }
    $this->afterValidate();
    return !$this->hasErrors();
}

            
validateMultiple() public static method

驗證多個模型。

此方法將驗證每個模型。 正在驗證的模型可能是相同或不同的類型。

public static boolean validateMultiple ( $models, $attributeNames null )
$models array

要驗證的模型

$attributeNames array|null

應該驗證的屬性名稱列表。 如果此參數為空,則表示應驗證適用驗證規則中列出的任何屬性。

return boolean

所有模型是否都有效。 如果一個或多個模型有驗證錯誤,將傳回 False。

                public static function validateMultiple($models, $attributeNames = null)
{
    $valid = true;
    /* @var $model Model */
    foreach ($models as $model) {
        $valid = $model->validate($attributeNames) && $valid;
    }
    return $valid;
}

            

事件詳情

隱藏繼承的屬性

EVENT_AFTER_VALIDATE event of type yii\base\Event

validate() 結束時引發的事件

EVENT_BEFORE_VALIDATE event of type yii\base\ModelEvent

validate() 開始時引發的事件。 您可以將 yii\base\ModelEvent::$isValid 設定為 false 以停止驗證。