1 位关注者

类 yii\base\DynamicModel

继承关系yii\base\DynamicModel » 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
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/base/DynamicModel.php

DynamicModel 是一个模型类,支持在运行时使用其构造函数或 defineAttribute() 定义属性(所谓的“动态属性”)。DynamicModel 可用于支持临时数据验证。

DynamicModel 的典型用法如下:

public function actionSearch($name, $email)
{
    $model = DynamicModel::validateData(compact('name', 'email'), [
        [['name', 'email'], 'string', 'max' => 128],
        ['email', 'email'],
    ]);
    if ($model->hasErrors()) {
        // validation fails
    } else {
        // validation succeeds
    }
}

以上示例展示了如何在 DynamicModel 的帮助下验证 $name$emailvalidateData() 方法创建了一个 DynamicModel 实例,使用给定的数据(本例中的 nameemail)定义属性,然后调用 yii\base\Model::validate()

您可以使用 hasErrors() 检查验证结果,就像使用普通模型一样。您还可以通过模型实例访问定义的动态属性,例如 $model->name$model->email

或者,您可以使用以下更“经典”的语法执行临时数据验证

$model = new DynamicModel(compact('name', 'email'));
$model->addRule(['name', 'email'], 'string', ['max' => 128])
    ->addRule('email', 'email')
    ->validate();

公有属性

隐藏继承属性

属性 类型 描述 定义于
$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\DynamicModel
__get() 返回组件属性的值。 yii\base\DynamicModel
__isset() 检查属性是否已设置,即已定义且不为 null。 yii\base\DynamicModel
__set() 设置组件属性的值。 yii\base\DynamicModel
__unset() 将组件属性设置为 null。 yii\base\DynamicModel
activeAttributes() 返回当前场景中要进行验证的属性名称。 yii\base\Model
addError() 向指定的属性添加新的错误。 yii\base\Model
addErrors() 添加错误列表。 yii\base\Model
addRule() 向此模型添加验证规则。 yii\base\DynamicModel
afterValidate() 此方法在验证结束时调用。 yii\base\Model
attachBehavior() 将行为附加到此组件。 yii\base\Component
attachBehaviors() 将行为列表附加到组件。 yii\base\Component
attributeHints() 返回属性提示。 yii\base\Model
attributeLabels() 返回属性标签。 yii\base\DynamicModel
attributes() 返回属性名称列表。 yii\base\DynamicModel
beforeValidate() 此方法在验证开始之前调用。 yii\base\Model
behaviors() 返回此组件应表现为的行为列表。 yii\base\Component
canGetProperty() 返回一个值,指示属性是否可以读取。 yii\base\DynamicModel
canSetProperty() 返回一个值,指示属性是否可以设置。 yii\base\DynamicModel
className() 返回此类的完全限定名称。 yii\base\BaseObject
clearErrors() 删除所有属性或单个属性的错误。 yii\base\Model
createValidators() 根据 rules() 中指定的验证规则创建验证器对象。 yii\base\Model
defineAttribute() 定义属性。 yii\base\DynamicModel
detachBehavior() 从组件中分离行为。 yii\base\Component
detachBehaviors() 从组件中分离所有行为。 yii\base\Component
ensureBehaviors() 确保 behaviors() 中声明的行为已附加到此组件。 yii\base\Component
extraFields() 返回可以进一步扩展并由 toArray() 返回的字段列表。 yii\base\ArrayableTrait
fields() 返回当未指定特定字段时,toArray() 默认应返回的字段列表。 yii\base\ArrayableTrait
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
hasAttribute() 返回一个值,指示模型是否具有指定名称的属性。 yii\base\DynamicModel
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
setAttributeLabel() 为单个属性设置标签。 yii\base\DynamicModel
setAttributeLabels() 设置所有属性的标签。 yii\base\DynamicModel
setAttributes() 以大规模方式设置属性值。 yii\base\Model
setScenario() 设置模型的场景。 yii\base\Model
toArray() 将模型转换为数组。 yii\base\ArrayableTrait
trigger() 触发事件。 yii\base\Component
undefineAttribute() 取消定义属性。 yii\base\DynamicModel
validate() 执行数据验证。 yii\base\Model
validateData() 使用指定的验证规则验证给定的数据。 yii\base\DynamicModel
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

方法详情

隐藏继承方法

__call() public method

定义于: yii\base\Component::__call()

调用不是类方法的命名方法。

此方法将检查任何附加的行为是否具有指定名称的方法,如果可用则执行它。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用它。

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

方法名称

$params array

方法参数

返回值 mixed

方法返回值

抛出 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 method

定义于: yii\base\Model::__clone()

此方法在通过克隆现有对象创建对象后调用。

它删除所有行为,因为它们附加到旧对象。

public void __clone ( )

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

            
__construct() public method

构造函数。

public void __construct ( array $attributes = [], $config = [] )
$attributes array

正在定义的属性(名称-值对或名称)。

$config array

要应用于此对象的配置数组。

                public function __construct(array $attributes = [], $config = [])
{
    foreach ($attributes as $name => $value) {
        if (is_int($name)) {
            $this->_attributes[$value] = null;
        } else {
            $this->_attributes[$name] = $value;
        }
    }
    parent::__construct($config);
}

            
__get() public method

返回组件属性的值。

此方法将按以下顺序检查并相应地采取行动

  • 由 getter 定义的属性:返回 getter 结果
  • 行为的属性:返回行为属性值

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 $value = $component->property; 时会隐式调用它。

public mixed __get ( $name )
$name string

属性名称

返回值 mixed

属性值或行为属性的值

抛出 yii\base\UnknownPropertyException

如果未定义属性

抛出 yii\base\InvalidCallException

如果属性是只写属性。

                public function __get($name)
{
    if ($this->hasAttribute($name)) {
        return $this->_attributes[$name];
    }
    return parent::__get($name);
}

            
__isset() public method

检查属性是否已设置,即已定义且不为 null。

此方法将按以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:返回属性是否已设置
  • 行为的属性:返回属性是否已设置
  • 对于不存在的属性返回 false

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 isset($component->property) 时会隐式调用它。

public boolean __isset ( $name )
$name string

属性名称或事件名称

返回值 boolean

命名的属性是否已设置

                public function __isset($name)
{
    if ($this->hasAttribute($name)) {
        return isset($this->_attributes[$name]);
    }
    return parent::__isset($name);
}

            
__set() public method

设置组件属性的值。

此方法将按以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:设置属性值
  • 格式为“on xyz”的事件:将处理程序附加到事件“xyz”
  • 格式为“as xyz”的行为:附加名为“xyz”的行为
  • 行为的属性:设置行为属性值

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 $component->property = $value; 时会隐式调用它。

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

属性名称或事件名称

$value mixed

属性值

抛出 yii\base\UnknownPropertyException

如果未定义属性

抛出 yii\base\InvalidCallException

如果属性是只读属性。

                public function __set($name, $value)
{
    if ($this->hasAttribute($name)) {
        $this->_attributes[$name] = $value;
    } else {
        parent::__set($name, $value);
    }
}

            
__unset() public method

将组件属性设置为 null。

此方法将按以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:将属性值设置为 null
  • 行为的属性:将属性值设置为 null

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 unset($component->property) 时会隐式调用它。

public void __unset ( $name )
$name string

属性名称

抛出 yii\base\InvalidCallException

如果属性是只读属性。

                public function __unset($name)
{
    if ($this->hasAttribute($name)) {
        unset($this->_attributes[$name]);
    } else {
        parent::__unset($name);
    }
}

            
activeAttributes() public method

定义于: yii\base\Model::activeAttributes()

返回当前场景中要进行验证的属性名称。

public string[] activeAttributes ( )
返回值 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 method

定义于: yii\base\Model::addError()

向指定的属性添加新的错误。

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

属性名称

$error string

新的错误消息

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

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

定义于: yii\base\Model::addErrors()

添加错误列表。

public void addErrors ( 数组 $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);
        }
    }
}

            
addRule() 公共方法

向此模型添加验证规则。

您也可以直接操作 $validators 来添加或删除验证规则。此方法提供了一种快捷方式。

public $this addRule ( $attributes, $validator, $options = [] )
$attributes 字符串|数组

要由规则验证的属性。

$validator 字符串|yii\validators\Validator|闭包

验证器。这可以是以下之一

  • builtInValidators 中列出的内置验证器名称;
  • 模型类的某个方法名;
  • 匿名函数;
  • 验证器类名。
  • 验证器。
$options array

要应用于验证器的选项(名称-值对)。

                public function addRule($attributes, $validator, $options = [])
{
    $validators = $this->getValidators();
    if ($validator instanceof Validator) {
        $validator->attributes = (array)$attributes;
    } else {
        $validator = Validator::createValidator($validator, $this, (array)$attributes, $options);
    }
    $validators->append($validator);
    $this->defineAttributesByValidator($validator);
    return $this;
}

            
afterValidate() 公共方法

定义于: yii\base\Model::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 字符串|数组|yii\base\Behavior

行为配置。这可以是以下之一

返回值 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 起可用)

定义于: yii\base\Model::attributeHints()

返回属性提示。

属性提示主要用于显示目的。例如,给定一个属性 isPublic,我们可以声明一个提示 是否应将帖子显示给未登录的用户,它提供了属性含义的用户友好描述,并且可以显示给最终用户。

与标签不同,如果省略显式声明,则不会生成提示。

请注意,为了继承父类中定义的提示,子类需要使用 array_merge() 等函数将父提示与子提示合并。

public 数组 attributeHints ( )
返回值 array

属性提示(名称 => 提示)

                public function attributeHints()
{
    return [];
}

            
attributeLabels() 公共方法

返回属性标签。

属性标签主要用于显示目的。例如,给定一个属性 firstName,我们可以声明一个标签 First Name,它更友好,可以显示给最终用户。

默认情况下,使用 generateAttributeLabel() 生成属性标签。此方法允许您显式指定属性标签。

请注意,为了继承父类中定义的标签,子类需要使用 array_merge() 等函数将父标签与子标签合并。

public 数组 attributeLabels ( )
返回值 array

属性标签(名称 => 标签)

                public function attributeLabels()
{
    return $this->_attributeLabels;
}

            
attributes() 公共方法

返回属性名称列表。

默认情况下,此方法返回类中的所有公共非静态属性。您可以覆盖此方法以更改默认行为。

public 字符串[] attributes ( )
返回值 string[]

属性名称列表。

                public function attributes()
{
    return array_keys($this->_attributes);
}

            
beforeValidate() 公共方法

定义于: yii\base\Model::beforeValidate()

此方法在验证开始之前调用。

默认实现引发 beforeValidate 事件。您可以覆盖此方法以在验证前进行初步检查。确保调用父实现,以便可以引发事件。

public 布尔值 beforeValidate ( )
返回值 boolean

是否应执行验证。默认为 true。如果返回 false,则验证将停止,并且模型被认为无效。

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

            
behaviors() 公共方法

定义于: yii\base\Component::behaviors()

返回此组件应表现为的行为列表。

子类可以重写此方法来指定它们想要表现的行为。

此方法的返回值应为行为对象或配置的数组,并以行为名称为索引。行为配置可以是指定行为类的字符串,也可以是以下结构的数组

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

请注意,行为类必须扩展自 yii\base\Behavior。可以使用名称或匿名方式附加行为。当使用名称作为数组键时,可以使用此名称,稍后可以使用 getBehavior() 获取行为,或使用 detachBehavior() 分离行为。匿名行为无法检索或分离。

在此方法中声明的行为将自动附加到组件(按需)。

public 数组 behaviors ( )
返回值 array

行为配置。

                public function behaviors()
{
    return [];
}

            
canGetProperty() 公共方法

返回一个值,指示属性是否可以读取。

如果可以读取属性

  • 类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有给定名称的可读属性(当 $checkBehaviors 为 true 时)。
public 布尔值 canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否可读

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return parent::canGetProperty($name, $checkVars, $checkBehaviors) || $this->hasAttribute($name);
}

            
canSetProperty() 公共方法

返回一个值,指示属性是否可以设置。

如果可以写入属性

  • 类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有给定名称的可写属性(当 $checkBehaviors 为 true 时)。
public 布尔值 canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否可写

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return parent::canSetProperty($name, $checkVars, $checkBehaviors) || $this->hasAttribute($name);
}

            
className() 公共静态方法
自 2.0.14 版起已弃用。在 PHP >=5.5 上,请改用 ::class

定义于: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static 字符串 className ( )
返回值 string

此类的完全限定名称。

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

            
clearErrors() 公共方法

定义于: yii\base\Model::clearErrors()

删除所有属性或单个属性的错误。

public void clearErrors ( $attribute null )
$attribute 字符串|null

属性名称。使用 null 删除所有属性的错误。

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

            
createValidators() 公共方法

定义于: yii\base\Model::createValidators()

根据 rules() 中指定的验证规则创建验证器对象。

getValidators() 不同,每次调用此方法时,都会返回新的验证器列表。

public ArrayObject createValidators ( )
返回值 ArrayObject

验证器

抛出 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;
}

            
defineAttribute() 公共方法

定义属性。

public void defineAttribute ( $name, $value null )
$name string

属性名称。

$value mixed

属性值。

                public function defineAttribute($name, $value = null)
{
    $this->_attributes[$name] = $value;
}

            
detachBehavior() 公共方法

定义于: yii\base\Component::detachBehavior()

从组件中分离行为。

将调用行为的 yii\base\Behavior::detach() 方法。

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

行为的名称。

返回值 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() 公共方法

定义于: yii\base\Component::detachBehaviors()

从组件中分离所有行为。

public void detachBehaviors ( )

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

            
ensureBehaviors() 公共方法

定义于: 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() 公共方法

定义于: yii\base\ArrayableTrait::extraFields()

返回可以进一步扩展并由 toArray() 返回的字段列表。

此方法类似于 fields(),但此方法返回的字段列表默认情况下不会由 toArray() 返回。只有当在调用 toArray() 时显式指定要扩展的字段名称时,才会导出其值。

默认实现返回一个空数组。

您可以重写此方法以根据某些上下文信息(例如当前应用程序用户)返回可扩展字段列表。

另请参阅

public 数组 extraFields ( )
返回值 array

可扩展字段名称或字段定义的列表。有关返回值的格式,请参阅 fields()

                public function extraFields()
{
    return [];
}

            
extractFieldsFor() 受保护方法 (自版本 2.0.14 起可用)

定义于: yii\base\ArrayableTrait::extractFieldsFor()

从给定根字段的字段集合中提取嵌套字段。嵌套字段用点 (.) 分隔。例如:“item.id” 上一个示例将提取“id”。

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

需要提取的字段

$rootField string

我们要为其提取嵌套字段的根字段

返回值 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() 受保护方法 (自版本 2.0.14 起可用)

定义于: yii\base\ArrayableTrait::extractRootFields()

从嵌套字段中提取根字段名称。

嵌套字段用点 (.) 分隔。例如:“item.id” 上述示例将提取“item”。

protected 数组 extractRootFields ( 数组 $fields )
$fields array

需要提取的字段

返回值 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() 公共方法

定义于: yii\base\ArrayableTrait::fields()

返回当未指定特定字段时,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 () {
        return $this->first_name . ' ' . $this->last_name;
    },
];

在此方法中,您可能还想根据某些上下文信息返回不同的字段列表。例如,根据当前应用程序用户的权限,您可以返回不同的可见字段集或过滤掉某些字段。

此方法的默认实现返回以自身为索引的公共对象成员变量。

另请参阅 toArray()

public 数组 fields ( )
返回值 array

字段名称或字段定义的列表。

                public function fields()
{
    $fields = array_keys(Yii::getObjectVars($this));
    return array_combine($fields, $fields);
}

            
formName() 公共方法

定义于: yii\base\Model::formName()

返回此模型类应使用的表单名称。

yii\widgets\ActiveForm 主要使用表单名称来确定如何为模型中的属性命名输入字段。如果表单名称为“A”且属性名称为“b”,则相应的输入名称将为“A[b]”。如果表单名称为空字符串,则输入名称将为“b”。

上述命名方案的目的是,对于包含多个不同模型的表单,每个模型的属性都分组在 POST 数据的子数组中,并且更容易区分它们。

默认情况下,此方法返回模型类名(不带命名空间部分)作为表单名称。当模型用于不同的表单时,您可以覆盖它。

另请参阅 load()

public 字符串 formName ( )
返回值 string

此模型类的表单名称。

抛出 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() 公共方法

定义于: yii\base\Model::generateAttributeLabel()

根据给定的属性名称生成用户友好的属性标签。

这是通过用空格替换下划线、破折号和点,并将每个单词的第一个字母更改为大写来完成的。例如,“department_name”或“DepartmentName”将生成“Department Name”。

public 字符串 generateAttributeLabel ( $name )
$name string

列名

返回值 string

属性标签

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

            
getActiveValidators() 公共方法

定义于: yii\base\Model::getActiveValidators()

返回适用于当前 $scenario 的验证器。

public yii\validators\Validator[] getActiveValidators ( $attribute null )
$attribute 字符串|null

应返回其适用验证器的属性的名称。如果此值为 null,则将返回模型中所有属性的验证器。

返回值 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() 公共方法 (自版本 2.0.4 起可用)

定义于: yii\base\Model::getAttributeHint()

返回指定属性的文本提示。

另请参阅 attributeHints()

public 字符串 getAttributeHint ( $attribute )
$attribute string

属性名称

返回值 string

属性提示

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

            
getAttributeLabel() 公共方法

定义于: yii\base\Model::getAttributeLabel()

返回指定属性的文本标签。

另请参阅

public 字符串 getAttributeLabel ( $attribute )
$attribute string

属性名称

返回值 string

属性标签

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

            
getAttributes() 公共方法

定义于: yii\base\Model::getAttributes()

返回属性值。

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

需要返回其值的属性列表。默认为 null,表示将返回 attributes() 中列出的所有属性。如果它是一个数组,则只返回数组中的属性。

$except array

不应返回其值的属性列表。

返回值 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() 公共方法

定义于: yii\base\Component::getBehavior()

返回命名的行为对象。

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

行为名称

返回值 yii\base\Behavior|null

行为对象,如果行为不存在则为 null

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

            
getBehaviors() 公共方法

定义于: yii\base\Component::getBehaviors()

返回附加到此组件的所有行为。

public yii\base\Behavior[] getBehaviors ( )
返回值 yii\base\Behavior[]

附加到此组件的行为列表

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

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

定义于: yii\base\Model::getErrorSummary()

将所有属性的错误作为一维数组返回。

另请参阅

public array getErrorSummary ( $showAllErrors )
$showAllErrors boolean

布尔值,如果设置为 true,则会显示每个属性的所有错误消息,否则只会显示每个属性的第一个错误消息。

返回值 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() 公共方法

定义于: yii\base\Model::getErrors()

返回所有属性或单个属性的错误。

另请参阅

public array getErrors ( $attribute null )
$attribute 字符串|null

属性名称。使用 null 获取所有属性的错误。

返回值 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() 公共方法

定义于: yii\base\Model::getFirstError()

返回指定属性的第一个错误。

另请参阅

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

属性名称。

返回值 字符串|null

错误消息。如果没有错误,则返回 null。

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

            
getFirstErrors() 公共方法

定义于: yii\base\Model::getFirstErrors()

返回模型中每个属性的第一个错误。

另请参阅

public array getFirstErrors ( )
返回值 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() 公共方法

定义于: yii\base\Model::getIterator()

返回一个迭代器,用于遍历模型中的属性。

此方法是接口 IteratorAggregate 所必需的。

public ArrayIterator getIterator ( )
返回值 ArrayIterator

用于遍历列表中项目的迭代器。

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

            
getScenario() 公共方法

定义于: yii\base\Model::getScenario()

返回此模型所使用的场景。

场景会影响如何执行验证以及哪些属性可以被批量赋值。

public string getScenario ( )
返回值 string

此模型所在的场景。默认为 SCENARIO_DEFAULT

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

            
getValidators() 公共方法

定义于: yii\base\Model::getValidators()

返回 rules() 中声明的所有验证器。

此方法与 getActiveValidators() 不同,后者仅返回适用于当前 $scenario 的验证器。

因为此方法返回一个 ArrayObject 对象,所以您可以通过插入或删除验证器来操作它(在模型行为中很有用)。例如,

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

模型中声明的所有验证器。

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

            
hasAttribute() 公共方法 (自版本 2.0.16 起可用)

返回一个值,指示模型是否具有指定名称的属性。

public boolean hasAttribute ( $name )
$name string

属性的名称。

返回值 boolean

模型是否具有指定名称的属性。

                public function hasAttribute($name)
{
    return array_key_exists($name, $this->_attributes);
}

            
hasErrors() 公共方法

定义于: yii\base\Model::hasErrors()

返回一个值,指示是否存在任何验证错误。

public boolean hasErrors ( $attribute null )
$attribute 字符串|null

属性名称。使用 null 检查所有属性。

返回值 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

事件名称

返回值 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

是否将行为的方法视为此组件的方法

返回值 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

是否将行为的属性视为此组件的属性

返回值 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() 公共静态方法

定义于: yii\base\StaticInstanceTrait::instance()

返回静态类实例,可用于获取元信息。

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

即使静态实例已缓存,是否重新创建它。

返回值 yii\base\DynamicModel

类实例。

                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() 公共方法

定义于: yii\base\Model::isAttributeActive()

返回一个值,指示属性在当前场景中是否处于活动状态。

另请参阅 activeAttributes()

public boolean isAttributeActive ( $attribute )
$attribute string

属性名称

返回值 boolean

属性在当前场景中是否处于活动状态

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

            
isAttributeRequired() 公共方法

定义于: yii\base\Model::isAttributeRequired()

返回一个值,指示属性是否必填。

这是通过检查属性是否在当前 $scenario 中与 required 验证规则关联来确定的。

请注意,当验证器使用 $when 应用条件验证时,此方法将返回 false,而不管 when 条件如何,因为它可能在模型加载数据之前被调用。

public boolean isAttributeRequired ( $attribute )
$attribute string

属性名称

返回值 boolean

属性是否必填

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

            
isAttributeSafe() 公共方法

定义于: yii\base\Model::isAttributeSafe()

返回一个值,指示属性是否适合大规模赋值。

另请参阅 safeAttributes()

public boolean isAttributeSafe ( $attribute )
$attribute string

属性名称

返回值 boolean

属性是否安全用于批量赋值

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

            
load() 公共方法

定义于: yii\base\Model::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 字符串|null

用于将数据加载到模型中的表单名称,表单未使用时为空字符串。如果未设置,则使用 formName()

返回值 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() 公共静态方法

定义于: yii\base\Model::loadMultiple()

使用来自最终用户的数据填充一组模型。

此方法主要用于收集表格数据输入。每个模型要加载的数据为 $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 字符串|null

用于将数据加载到模型中的表单名称。如果未设置,它将使用 $models 中第一个模型的 formName() 值。此参数从 2.0.1 版本开始可用。

返回值 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,则将移除附加到命名事件的所有处理程序。

返回值 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() 公共方法

定义于: yii\base\Model::offsetExists()

返回指定偏移量处是否存在元素。

此方法由 SPL 接口 ArrayAccess 要求。当您使用类似 isset($model[$offset]) 的代码时,会隐式调用此方法。

public 布尔型 offsetExists ( $offset )
$offset string

要检查的偏移量。

返回值 boolean

是否存在偏移量。

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

            
offsetGet() 公共方法

定义于: yii\base\Model::offsetGet()

返回指定偏移量处的元素。

此方法由 SPL 接口 ArrayAccess 要求。当您使用类似 $value = $model[$offset]; 的代码时,会隐式调用此方法。

public 混合类型 offsetGet ( $offset )
$offset string

要检索元素的偏移量。

返回值 mixed

偏移量处的元素,如果在偏移量处未找到元素,则为 null

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

            
offsetSet() 公共方法

定义于: yii\base\Model::offsetSet()

设置指定偏移量处的元素。

此方法由 SPL 接口 ArrayAccess 要求。当您使用类似 $model[$offset] = $value; 的代码时,会隐式调用此方法。

public 空类型 offsetSet ( $offset, $value )
$offset string

要设置元素的偏移量

$value mixed

元素值

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

            
offsetUnset() 公共方法

定义于: yii\base\Model::offsetUnset()

将指定偏移量处的元素值设置为 null。

此方法由 SPL 接口 ArrayAccess 要求。当您使用类似 unset($model[$offset]) 的代码时,会隐式调用此方法。

public 空类型 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 空类型 on ( $name, $handler, $data null, $append true )
$name string

事件名称

$handler 可调用

事件处理程序

$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\base\Model::onUnsafeAttribute()

当正在大规模赋值不安全的属性时,将调用此方法。

默认实现将在 YII_DEBUG 为开启时记录警告消息。否则什么也不做。

public 空类型 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() 受保护方法

定义于: yii\base\ArrayableTrait::resolveFields()

确定哪些字段可以由 toArray() 返回。

此方法将首先从给定的字段中提取根字段。然后,它将检查请求的根字段与 fields()extraFields() 中声明的那些字段,以确定可以返回哪些字段。

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

正在请求导出的字段

$expand array

正在请求导出的附加字段

返回值 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() 公共方法

定义于: yii\base\Model::rules()

返回属性的验证规则。

验证规则由 validate() 用于检查属性值是否有效。子类可以重写此方法以声明不同的验证规则。

每个规则都是一个数组,具有以下结构

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

其中

  • 属性列表:必需,指定要验证的属性数组,对于单个属性,您可以传递一个字符串;
  • 验证器类型:必需,指定要使用的验证器。它可以是内置验证器名称、模型类的函数名称、匿名函数或验证器类名称。
  • on:可选,指定 场景 数组,其中可以应用验证规则。如果未设置此选项,则规则将应用于所有场景。
  • 可以指定其他名称-值对来初始化相应的验证器属性。请参阅各个验证器类的 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 数组 rules ( )
返回值 array

验证规则

                public function rules()
{
    return [];
}

            
safeAttributes() 公共方法

定义于: yii\base\Model::safeAttributes()

返回在当前场景中可以安全地大规模赋值的属性名称。

public 字符串[] safeAttributes ( )
返回值 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() 公共方法

定义于: yii\base\Model::scenarios()

返回场景列表以及相应的活动属性。

活动属性是在当前场景中受验证的属性。返回的数组应采用以下格式

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

默认情况下,活动属性被认为是安全的,并且可以进行批量赋值。如果某个属性不应该进行批量赋值(因此被认为是不安全的),请在属性名前缀添加感叹号字符(例如:'!rank')。

此方法的默认实现将返回在 rules() 声明中找到的所有场景。一个名为 SCENARIO_DEFAULT 的特殊场景将包含在 rules() 中找到的所有属性。每个场景都将与受应用于该场景的验证规则验证的属性相关联。

public array scenarios ( )
返回值 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;
}

            
setAttributeLabel() 公共方法 (自版本 2.0.35 起可用)

为单个属性设置标签。

public $this setAttributeLabel ( $attribute, $label )
$attribute string

属性名称。

$label string

属性标签值。

                public function setAttributeLabel($attribute, $label)
{
    $this->_attributeLabels[$attribute] = $label;
    return $this;
}

            
setAttributeLabels() 公共方法 (自版本 2.0.35 起可用)

设置所有属性的标签。

public $this setAttributeLabels ( array $labels = [] )
$labels string[]

属性标签。

                public function setAttributeLabels(array $labels = [])
{
    $this->_attributeLabels = $labels;
    return $this;
}

            
setAttributes() 公共方法

定义于: yii\base\Model::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() 公共方法

定义于: yii\base\Model::setScenario()

设置模型的场景。

请注意,此方法不会检查场景是否存在。方法 validate() 将执行此检查。

public void setScenario ( $value )
$value string

此模型所在的场景。

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

            
toArray() 公共方法

定义于: yii\base\ArrayableTrait::toArray()

将模型转换为数组。

此方法首先通过调用 resolveFields() 来确定要包含在结果数组中的字段。然后,它将模型转换为具有这些字段的数组。如果 $recursive 为真,则任何嵌入对象也将转换为数组。当嵌入对象为 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 必须为真才能提取嵌套字段。如果 $recursive 为假,则仅提取根字段。

$expand array

为导出请求的附加字段。仅在 extraFields() 中声明的字段将被考虑。Expand 也可以嵌套,并用点 (.) 分隔。例如:item.expand1.expand2 $recursive 必须为真才能提取嵌套扩展。如果 $recursive 为假,则仅提取根扩展。

$recursive boolean

是否递归返回嵌入对象的数组表示形式。

返回值 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);
}

            
undefineAttribute() 公共方法

取消定义属性。

public void undefineAttribute ( $name )
$name string

属性名称。

                public function undefineAttribute($name)
{
    unset($this->_attributes[$name]);
}

            
validate() 公共方法

定义于: yii\base\Model::validate()

执行数据验证。

此方法执行适用于当前 $scenario 的验证规则。使用以下标准来确定规则当前是否适用

  • 规则必须与当前场景相关的属性相关联;
  • 规则必须对当前场景有效。

此方法将在实际验证之前和之后分别调用 beforeValidate()afterValidate()。如果 beforeValidate() 返回 false,则验证将被取消,并且 afterValidate() 不会被调用。

验证期间发现的错误可以通过 getErrors()getFirstErrors()getFirstError() 检索。

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

应验证的属性名称或属性名称列表。如果此参数为空,则表示应验证在适用验证规则中列出的任何属性。

$clearErrors boolean

是否在执行验证之前调用 clearErrors()

返回值 boolean

验证是否成功且没有任何错误。

抛出 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();
}

            
validateData() 公共静态方法

使用指定的验证规则验证给定的数据。

此方法将创建一个 DynamicModel 实例,使用要验证的数据填充它,创建指定的验证规则,然后使用这些规则验证数据。

public static 静态 validateData ( 数组 $data, $rules = [] )
$data array

要验证的数据(名称-值对)。

$rules array

验证规则。有关此参数的格式,请参阅 yii\base\Model::rules()

返回值 yii\base\DynamicModel

包含正在验证数据的模型实例。

抛出 yii\base\InvalidConfigException

如果验证规则未正确指定。

                public static function validateData(array $data, $rules = [])
{
    /* @var $model DynamicModel */
    $model = new static($data);
    if (!empty($rules)) {
        $validators = $model->getValidators();
        foreach ($rules as $rule) {
            if ($rule instanceof Validator) {
                $validators->append($rule);
                $model->defineAttributesByValidator($rule);
            } elseif (is_array($rule) && isset($rule[0], $rule[1])) { // attributes, validator type
                $validator = Validator::createValidator($rule[1], $model, (array)$rule[0], array_slice($rule, 2));
                $validators->append($validator);
                $model->defineAttributesByValidator($validator);
            } else {
                throw new InvalidConfigException('Invalid validation rule: a rule must specify both attribute names and validator type.');
            }
        }
    }
    $model->validate();
    return $model;
}

            
validateMultiple() 公共静态方法

定义于: yii\base\Model::validateMultiple()

验证多个模型。

此方法将验证每个模型。正在验证的模型可以是相同类型或不同类型的。

public static 布尔值 validateMultiple ( $models, $attributeNames null )
$models array

要验证的模型

$attributeNames 数组|null

应验证的属性名称列表。如果此参数为空,则表示应验证适用验证规则中列出的任何属性。

返回值 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;
}