1 关注者

类 yii\data\ActiveDataFilter

继承关系yii\data\ActiveDataFilter » yii\data\DataFilter » 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.13
源代码 https://github.com/yiisoft/yii2/blob/master/framework/data/ActiveDataFilter.php

ActiveDataFilter 允许以适合 yii\db\QueryInterface::where() 的格式组合过滤条件。

另请参阅 yii\data\DataFilter

公有属性

隐藏继承的属性

属性 类型 描述 定义于
$activeValidators yii\validators\Validator[] 适用于当前 $scenario 的验证器。 yii\base\Model
$attributeMap array 用于搜索条件的实际属性名称,格式为:[filterAttribute => actualAttribute]。 yii\data\DataFilter
$attributes array 属性值(名称 => 值)。 yii\base\Model
$behaviors yii\base\Behavior[] 附加到此组件的行为列表。 yii\base\Component
$conditionBuilders array 将过滤条件关键字映射到构建方法。 yii\data\ActiveDataFilter
$conditionValidators array 将过滤条件关键字映射到验证方法。 yii\data\DataFilter
$errorMessages array 错误消息,格式为 [errorKey => message] yii\data\DataFilter
$errors array 所有属性或指定属性的错误。 yii\base\Model
$filter mixed 原始过滤值。 yii\data\DataFilter
$filterAttributeLabel string 通过 $filterAttributeName 指定的过滤属性的标签。 yii\data\DataFilter
$filterAttributeName string 处理过滤值的属性的名称。 yii\data\DataFilter
$filterControls array 可在过滤器中使用的关键字或表达式。 yii\data\DataFilter
$firstErrors array 第一个错误。 yii\base\Model
$iterator ArrayIterator 用于遍历列表中项目的迭代器。 yii\base\Model
$multiValueOperators array 应接受多个值的运算符关键字列表。 yii\data\DataFilter
$nullValue string null 的表示形式,而不是文字 null,以防后者无法使用。 yii\data\DataFilter
$operatorTypes array 为每个运算符指定支持的搜索属性类型列表。 yii\data\DataFilter
$queryOperatorMap array 将过滤运算符映射到 yii\db\QueryInterface::where() 中使用的运算符。 yii\data\ActiveDataFilter
$scenario string 此模型所在的场景。 yii\base\Model
$searchAttributeTypes array 搜索属性类型映射。 yii\data\DataFilter
$searchModel yii\base\Model 模型实例。 yii\data\DataFilter
$validators ArrayObject|yii\validators\Validator[] 模型中声明的所有验证器。 yii\base\Model

公有方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\Component
__clone() 此方法在通过克隆现有对象创建对象后调用。 yii\base\Model
__construct() 构造函数。 yii\base\BaseObject
__get() 返回组件属性的值。 yii\data\DataFilter
__isset() 检查属性是否已设置,即定义且不为空。 yii\data\DataFilter
__set() 设置组件属性的值。 yii\data\DataFilter
__unset() 将组件属性设置为 null。 yii\data\DataFilter
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\data\DataFilter
attributes() 返回属性名称列表。 yii\data\DataFilter
beforeValidate() 此方法在验证开始前调用。 yii\base\Model
behaviors() 返回此组件应表现为的行为列表。 yii\base\Component
build() $filter 值构建实际的过滤器规范。 yii\data\DataFilter
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\data\DataFilter
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\data\DataFilter
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\ArrayableTrait
formName() 返回此模型类应使用的表单名称。 yii\data\DataFilter
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
getErrorMessages() yii\data\DataFilter
getErrorSummary() 将所有属性的错误作为一维数组返回。 yii\base\Model
getErrors() 返回所有属性或单个属性的错误。 yii\base\Model
getFilter() yii\data\DataFilter
getFirstError() 返回指定属性的第一个错误。 yii\base\Model
getFirstErrors() 返回模型中每个属性的第一个错误。 yii\base\Model
getIterator() 返回一个迭代器,用于遍历模型中的属性。 yii\base\Model
getScenario() 返回此模型使用的场景。 yii\base\Model
getSearchAttributeTypes() yii\data\DataFilter
getSearchModel() yii\data\DataFilter
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
normalize() 规范化过滤器值,根据$filterControls$attributeMap替换原始键。 yii\data\DataFilter
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\data\DataFilter
safeAttributes() 返回在当前场景中可以批量分配的安全属性名称。 yii\base\Model
scenarios() 返回场景列表以及相应的活动属性。 yii\base\Model
setAttributes() 以批量方式设置属性值。 yii\base\Model
setErrorMessages() 设置响应无效过滤器结构的错误消息列表,格式为:[errorKey => message] yii\data\DataFilter
setFilter() yii\data\DataFilter
setScenario() 设置模型的场景。 yii\base\Model
setSearchAttributeTypes() yii\data\DataFilter
setSearchModel() yii\data\DataFilter
toArray() 将模型转换为数组。 yii\base\ArrayableTrait
trigger() 触发事件。 yii\base\Component
validate() 执行数据验证。 yii\base\Model
validateFilter() 验证过滤器属性值以匹配过滤器条件规范。 yii\data\DataFilter
validateMultiple() 验证多个模型。 yii\base\Model

受保护的方法

隐藏继承的方法

方法 描述 定义于
buildAttributeCondition() 为特定属性构建搜索条件。 yii\data\ActiveDataFilter
buildBlockCondition() 构建块条件,该条件由单个条件组成。 yii\data\ActiveDataFilter
buildCondition() yii\data\ActiveDataFilter
buildConjunctionCondition() 构建连接条件,该条件由多个独立的条件组成。 yii\data\ActiveDataFilter
buildInternal() 执行实际的过滤器构建。 yii\data\ActiveDataFilter
buildOperatorCondition() 构建运算符条件。 yii\data\ActiveDataFilter
defaultErrorMessages() 返回$errorMessages的默认值。 yii\data\DataFilter
detectSearchAttributeType() 从给定的验证器检测属性类型。 yii\data\DataFilter
detectSearchAttributeTypes() $searchModel验证规则中组合$searchAttributeTypes的默认值。 yii\data\DataFilter
extractFieldsFor() 从给定根字段的字段集合中提取嵌套字段。嵌套字段用点 (.) 分隔。例如:“item.id” 上面的示例将提取“id”。 yii\base\ArrayableTrait
extractRootFields() 从嵌套字段中提取根字段名称。 yii\base\ArrayableTrait
filterAttributeValue() $searchModel的范围内验证属性值,应用任何属性值过滤器。 yii\data\DataFilter
parseErrorMessage() 解析$errorMessages中由消息键指定的消息内容。 yii\data\DataFilter
resolveFields() 确定toArray()可以返回哪些字段。 yii\base\ArrayableTrait
validateAttributeCondition() 验证特定属性的搜索条件。 yii\data\DataFilter
validateAttributeValue() model的范围内验证属性值。 yii\data\DataFilter
validateBlockCondition() 验证由单个条件组成的块条件。 yii\data\DataFilter
validateCondition() 验证过滤器条件。 yii\data\DataFilter
validateConjunctionCondition() 验证由多个独立条件组成的连接条件。 yii\data\DataFilter
validateOperatorCondition() 验证运算符条件。 yii\data\DataFilter

事件

隐藏继承的事件

事件 类型 描述 定义于
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
TYPE_ARRAY 'array' yii\data\DataFilter
TYPE_BOOLEAN 'boolean' yii\data\DataFilter
TYPE_DATE 'date' yii\data\DataFilter
TYPE_DATETIME 'datetime' yii\data\DataFilter
TYPE_FLOAT 'float' yii\data\DataFilter
TYPE_INTEGER 'integer' yii\data\DataFilter
TYPE_STRING 'string' yii\data\DataFilter
TYPE_TIME 'time' yii\data\DataFilter

属性详细信息

隐藏继承的属性

$conditionBuilders 公共属性

将过滤条件关键字映射到构建方法。这些方法由buildCondition()用于构建实际的过滤条件。可以使用 PHP 回调指定特定的条件构建器。例如

[
    'XOR' => function (string $operator, mixed $condition) {
        //return array;
    },
    'LIKE' => function (string $operator, mixed $condition, string $attribute) {
        //return array;
    },
]
public array $conditionBuilders = [
    
'AND' => 'buildConjunctionCondition',
    
'OR' => 'buildConjunctionCondition',
    
'NOT' => 'buildBlockCondition',
    
'<' => 'buildOperatorCondition',
    
'>' => 'buildOperatorCondition',
    
'<=' => 'buildOperatorCondition',
    
'>=' => 'buildOperatorCondition',
    
'=' => 'buildOperatorCondition',
    
'!=' => 'buildOperatorCondition',
    
'IN' => 'buildOperatorCondition',
    
'NOT IN' => 'buildOperatorCondition',
    
'LIKE' => 'buildOperatorCondition',
]
$queryOperatorMap 公共属性

将过滤运算符映射到yii\db\QueryInterface::where()中使用的运算符。格式为:[filterOperator => queryOperator]。如果映射中未出现特定的运算符关键字,则将按原样使用。

通常可以将映射留空,因为过滤器运算符名称与yii\db\QueryInterface::where()中使用的名称一致。但是,在某些特殊情况下,您可能希望对其进行调整。例如,当使用 PostgreSQL 时,您可能希望设置以下映射

[
    'LIKE' => 'ILIKE'
]

方法详细信息

隐藏继承的方法

__call() 公共方法

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

定义于:yii\base\Model::__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\data\DataFilter::__get()

返回组件属性的值。

此方法将按以下顺序检查并采取相应的操作

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

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

public mixed __get ( $name )
$name string

属性名称

返回值 mixed

属性值或行为属性的值

抛出 yii\base\UnknownPropertyException

如果属性未定义

抛出 yii\base\InvalidCallException

如果属性是只写属性。

                public function __get($name)
{
    if ($name === $this->filterAttributeName) {
        return $this->getFilter();
    }
    return parent::__get($name);
}

            
__isset() 公共方法

定义于: yii\data\DataFilter::__isset()

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

此方法将按以下顺序检查并采取相应的操作

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

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

public boolean __isset ( $name )
$name string

属性名称或事件名称

返回值 boolean

命名属性是否已设置

                public function __isset($name)
{
    if ($name === $this->filterAttributeName) {
        return $this->getFilter() !== null;
    }
    return parent::__isset($name);
}

            
__set() 公共方法

定义于: yii\data\DataFilter::__set()

设置组件属性的值。

此方法将按以下顺序检查并采取相应的操作

  • 由 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 ($name === $this->filterAttributeName) {
        $this->setFilter($value);
    } else {
        parent::__set($name, $value);
    }
}

            
__unset() 公共方法

定义于: yii\data\DataFilter::__unset()

将组件属性设置为 null。

此方法将按以下顺序检查并采取相应的操作

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

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

public void __unset ( $name )
$name string

属性名称

抛出 yii\base\InvalidCallException

如果属性是只读属性。

                public function __unset($name)
{
    if ($name === $this->filterAttributeName) {
        $this->setFilter(null);
    } else {
        parent::__unset($name);
    }
}

            
activeAttributes() 公共方法

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

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

定义于: 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 string|array|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,我们可以声明一个提示 Whether the post should be visible for not logged in users,它提供了属性含义的用户友好描述,并且可以显示给最终用户。

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

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

public array attributeHints ( )
返回值 array

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

                public function attributeHints()
{
    return [];
}

            
attributeLabels() 公共方法

定义于: yii\data\DataFilter::attributeLabels()

返回属性标签。

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

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

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

public array attributeLabels ( )
返回值 array

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

                public function attributeLabels()
{
    return [
        $this->filterAttributeName => $this->filterAttributeLabel,
    ];
}

            
attributes() 公共方法

定义于: yii\data\DataFilter::attributes()

返回属性名称列表。

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

public string[] attributes ( )
返回值 string[]

属性名称列表。

                public function attributes()
{
    return [
        $this->filterAttributeName,
    ];
}

            
beforeValidate() 公共方法

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

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

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

public boolean 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 array behaviors ( )
返回值 array

行为配置。

                public function behaviors()
{
    return [];
}

            
build() 公共方法

定义于: yii\data\DataFilter::build()

$filter 值构建实际的过滤器规范。

public mixed|false build ( $runValidation true )
$runValidation boolean

是否在构建过滤器之前执行验证(调用 validate())。默认为 true。如果验证失败,则不会构建任何过滤器,并且此方法将返回 false

返回值 mixed|false

构建的实际过滤器值,如果验证失败则为 false

                public function build($runValidation = true)
{
    if ($runValidation && !$this->validate()) {
        return false;
    }
    return $this->buildInternal();
}

            
buildAttributeCondition() 受保护方法

为特定属性构建搜索条件。

protected array buildAttributeCondition ( $attribute, $condition )
$attribute string

搜索属性名称。

$condition mixed

搜索条件。

返回值 array

实际条件。

                protected function buildAttributeCondition($attribute, $condition)
{
    if (is_array($condition)) {
        $parts = [];
        foreach ($condition as $operator => $value) {
            if (isset($this->operatorTypes[$operator])) {
                if (isset($this->conditionBuilders[$operator])) {
                    $method = $this->conditionBuilders[$operator];
                    if (is_string($method)) {
                        $callback = [$this, $method];
                    } else {
                        $callback = $method;
                    }
                    $parts[] = $callback($operator, $value, $attribute);
                } else {
                    $parts[] = $this->buildOperatorCondition($operator, $value, $attribute);
                }
            }
        }
        if (!empty($parts)) {
            if (count($parts) > 1) {
                return array_merge(['AND'], $parts);
            }
            return array_shift($parts);
        }
    }
    return [$attribute => $this->filterAttributeValue($attribute, $condition)];
}

            
buildBlockCondition() 受保护方法

构建块条件,该条件由单个条件组成。

它涵盖了诸如 not 之类的运算符。

protected array buildBlockCondition ( $operator, $condition )
$operator string

运算符关键字。

$condition mixed

原始条件。

返回值 array

实际条件。

                protected function buildBlockCondition($operator, $condition)
{
    if (isset($this->queryOperatorMap[$operator])) {
        $operator = $this->queryOperatorMap[$operator];
    }
    return [
        $operator,
        $this->buildCondition($condition),
    ];
}

            
buildCondition() 受保护方法

protected array buildCondition ( $condition )
$condition array
返回值 array

构建的条件。

                protected function buildCondition($condition)
{
    $parts = [];
    foreach ($condition as $key => $value) {
        if (isset($this->conditionBuilders[$key])) {
            $method = $this->conditionBuilders[$key];
            if (is_string($method)) {
                $callback = [$this, $method];
            } else {
                $callback = $method;
            }
        } else {
            $callback = [$this, 'buildAttributeCondition'];
        }
        $parts[] = $callback($key, $value);
    }
    if (!empty($parts)) {
        if (count($parts) > 1) {
            array_unshift($parts, 'AND');
        } else {
            $parts = array_shift($parts);
        }
    }
    return $parts;
}

            
buildConjunctionCondition() 受保护方法

构建连接条件,该条件由多个独立的条件组成。

它涵盖了诸如 andor 之类的运算符。

受保护 数组 buildConjunctionCondition ( $operator, $condition )
$operator string

运算符关键字。

$condition mixed

原始条件。

返回值 array

实际条件。

                protected function buildConjunctionCondition($operator, $condition)
{
    if (isset($this->queryOperatorMap[$operator])) {
        $operator = $this->queryOperatorMap[$operator];
    }
    $result = [$operator];
    foreach ($condition as $part) {
        $result[] = $this->buildCondition($part);
    }
    return $result;
}

            
buildInternal() 受保护方法

执行实际的过滤器构建。

默认情况下,此方法返回 normalize() 的结果。子类可以重写此方法,提供更具体的实现。

受保护 混合类型 buildInternal ( )
返回值 mixed

构建实际的过滤器值。

                protected function buildInternal()
{
    $filter = $this->normalize(false);
    if (empty($filter)) {
        return [];
    }
    return $this->buildCondition($filter);
}

            
buildOperatorCondition() 受保护方法

构建运算符条件。

受保护 数组 buildOperatorCondition ( $operator, $condition, $attribute )
$operator string

运算符关键字。

$condition mixed

属性条件。

$attribute string

属性名称。

返回值 array

实际条件。

                protected function buildOperatorCondition($operator, $condition, $attribute)
{
    if (isset($this->queryOperatorMap[$operator])) {
        $operator = $this->queryOperatorMap[$operator];
    }
    return [$operator, $attribute, $this->filterAttributeValue($attribute, $condition)];
}

            
canGetProperty() 公共方法

定义于: yii\data\DataFilter::canGetProperty()

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

如果满足以下条件,则可以读取属性:

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

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

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

返回值 boolean

属性是否可读

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

            
canSetProperty() 公共方法

定义于: yii\data\DataFilter::canSetProperty()

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

如果满足以下条件,则可以写入属性:

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

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

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

返回值 boolean

属性是否可写

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

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

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

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

公共静态 字符串 className ( )
返回值 string

此类的完全限定名称。

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

            
clearErrors() 公共方法

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

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

公共 clearErrors ( $attribute null )
$attribute 字符串|

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

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

            
createValidators() 公共方法

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

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

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

公共 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;
}

            
defaultErrorMessages() 受保护方法
受保护 数组 defaultErrorMessages ( )
返回值 array

默认错误消息,格式为 [错误键 => 消息]

                protected function defaultErrorMessages()
{
    return [
        'invalidFilter' => Yii::t('yii', 'The format of {filter} is invalid.'),
        'operatorRequireMultipleOperands' => Yii::t('yii', 'Operator "{operator}" requires multiple operands.'),
        'unknownAttribute' => Yii::t('yii', 'Unknown filter attribute "{attribute}"'),
        'invalidAttributeValueFormat' => Yii::t('yii', 'Condition for "{attribute}" should be either a value or valid operator specification.'),
        'operatorRequireAttribute' => Yii::t('yii', 'Operator "{operator}" must be used with a search attribute.'),
        'unsupportedOperatorType' => Yii::t('yii', '"{attribute}" does not support operator "{operator}".'),
    ];
}

            
detachBehavior() 公共方法

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

从组件中分离行为。

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

公共 yii\base\Behavior| detachBehavior ( $name )
$name string

行为的名称。

返回值 yii\base\Behavior|

已分离的行为。如果行为不存在,则为 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()

从组件中分离所有行为。

公共 detachBehaviors ( )

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

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

定义于: yii\data\DataFilter::detectSearchAttributeType()

从给定的验证器检测属性类型。

受保护 字符串| detectSearchAttributeType ( yii\validators\Validator $validator )
$validator yii\validators\Validator

要从中检测属性类型的验证器。

返回值 字符串|

检测到的属性类型。

                protected function detectSearchAttributeType(Validator $validator)
{
    if ($validator instanceof BooleanValidator) {
        return self::TYPE_BOOLEAN;
    }
    if ($validator instanceof NumberValidator) {
        return $validator->integerOnly ? self::TYPE_INTEGER : self::TYPE_FLOAT;
    }
    if ($validator instanceof StringValidator) {
        return self::TYPE_STRING;
    }
    if ($validator instanceof EachValidator) {
        return self::TYPE_ARRAY;
    }
    if ($validator instanceof DateValidator) {
        if ($validator->type == DateValidator::TYPE_DATETIME) {
            return self::TYPE_DATETIME;
        }
        if ($validator->type == DateValidator::TYPE_TIME) {
            return self::TYPE_TIME;
        }
        return self::TYPE_DATE;
    }
}

            
detectSearchAttributeTypes() 受保护方法

定义于: yii\data\DataFilter::detectSearchAttributeTypes()

$searchModel验证规则中组合$searchAttributeTypes的默认值。

受保护 数组 detectSearchAttributeTypes ( )
返回值 array

属性类型映射。

                protected function detectSearchAttributeTypes()
{
    $model = $this->getSearchModel();
    $attributeTypes = [];
    foreach ($model->activeAttributes() as $attribute) {
        $attributeTypes[$attribute] = self::TYPE_STRING;
    }
    foreach ($model->getValidators() as $validator) {
        $type = $this->detectSearchAttributeType($validator);
        if ($type !== null) {
            foreach ((array) $validator->attributes as $attribute) {
                $attributeTypes[$attribute] = $type;
            }
        }
    }
    return $attributeTypes;
}

            
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 array extraFields ( )
返回值 array

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

                public function extraFields()
{
    return [];
}

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

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

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

protected array extractFieldsFor ( array $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 array extractRootFields ( array $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 array fields ( )
返回值 array

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

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

            
filterAttributeValue() 受保护方法

定义于: yii\data\DataFilter::filterAttributeValue()

$searchModel的范围内验证属性值,应用任何属性值过滤器。

protected mixed filterAttributeValue ( $attribute, $value )
$attribute string

属性名称。

$value mixed

属性值。

返回值 mixed

已过滤的属性值。

                protected function filterAttributeValue($attribute, $value)
{
    $model = $this->getSearchModel();
    if (!$model->isAttributeSafe($attribute)) {
        $this->addError($this->filterAttributeName, $this->parseErrorMessage('unknownAttribute', ['attribute' => $attribute]));
        return $value;
    }
    $model->{$attribute} = $value;
    if (!$model->validate([$attribute])) {
        $this->addError($this->filterAttributeName, $model->getFirstError($attribute));
        return $value;
    }
    return $model->{$attribute};
}

            
formName() 公共方法

定义于: yii\data\DataFilter::formName()

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

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

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

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

public string formName ( )
返回值 string

此模型类的表单名称。

抛出 yii\base\InvalidConfigException

当表单使用匿名类定义且未重写 formName() 方法时。

                public function formName()
{
    return '';
}

            
generateAttributeLabel() 公共方法

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

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

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

public string 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,则将返回模型中所有属性的验证器。

返回值 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 string getAttributeHint ( $attribute )
$attribute string

属性名称

返回值 string

属性提示

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

            
getAttributeLabel() 公共方法

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

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

另请参阅

public string 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 array getAttributes ( $names null, $except = [] )
$names array|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

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

            
getErrorMessages() 公共方法
public array getErrorMessages ( )
返回值 array

错误消息,格式为 [errorKey => message]

                public function getErrorMessages()
{
    if (!is_array($this->_errorMessages)) {
        if ($this->_errorMessages === null) {
            $this->_errorMessages = $this->defaultErrorMessages();
        } else {
            $this->_errorMessages = array_merge(
                $this->defaultErrorMessages(),
                call_user_func($this->_errorMessages)
            );
        }
    }
    return $this->_errorMessages;
}

            
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 获取所有属性的错误。

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

            
getFilter() 公共方法
public mixed getFilter ( )
返回值 mixed

原始过滤值。

                public function getFilter()
{
    return $this->_filter;
}

            
getFirstError() 公共方法

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

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

另请参阅

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

属性名称。

返回值 字符串|

错误消息。如果没有错误,则返回 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;
}

            
getSearchAttributeTypes() 公共方法
public 数组 getSearchAttributeTypes ( )
返回值 array

搜索属性类型映射。

                public function getSearchAttributeTypes()
{
    if ($this->_searchAttributeTypes === null) {
        $this->_searchAttributeTypes = $this->detectSearchAttributeTypes();
    }
    return $this->_searchAttributeTypes;
}

            
getSearchModel() 公共方法
public yii\base\Model getSearchModel ( )
返回值 yii\base\Model

模型实例。

抛出 yii\base\InvalidConfigException

在配置无效时。

                public function getSearchModel()
{
    if (!is_object($this->_searchModel) || $this->_searchModel instanceof \Closure) {
        $model = Yii::createObject($this->_searchModel);
        if (!$model instanceof Model) {
            throw new InvalidConfigException('`' . get_class($this) . '::$searchModel` should be an instance of `' . Model::className() . '` or its DI compatible configuration.');
        }
        $this->_searchModel = $model;
    }
    return $this->_searchModel;
}

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

            
hasErrors() 公共方法

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

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

public 布尔值 hasErrors ( $attribute null )
$attribute 字符串|

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

返回值 boolean

是否存在任何错误。

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

            
hasEventHandlers() 公共方法

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

返回一个值,指示是否有任何处理程序附加到指定的事件。

public 布尔值 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 布尔值 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 布尔值 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 静态 instance ( $refresh false )
$refresh boolean

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

返回值 yii\data\ActiveDataFilter

类实例。

                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 布尔值 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 布尔值 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 布尔值 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 字符串|

用于将数据加载到模型中的表单名称,表单未使用时为空字符串。如果未设置,则使用 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 字符串|

用于将数据加载到模型中的表单名称。如果未设置,它将使用 $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;
}

            
normalize() 公共方法

定义于: yii\data\DataFilter::normalize()

规范化过滤器值,根据$filterControls$attributeMap替换原始键。

public array|boolean normalize ( $runValidation true )
$runValidation boolean

是否在规范化过滤器之前执行验证(调用 validate())。默认为 true。如果验证失败,则不会处理任何过滤器,并且此方法将返回 false

返回值 array|boolean

规范化的过滤器值,如果验证失败则为 false

                public function normalize($runValidation = true)
{
    if ($runValidation && !$this->validate()) {
        return false;
    }
    $filter = $this->getFilter();
    if (!is_array($filter) || empty($filter)) {
        return [];
    }
    return $this->normalizeComplexFilter($filter);
}

            
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 boolean 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 mixed 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 void 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 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\base\Model::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__);
    }
}

            
parseErrorMessage() 受保护方法

定义于: yii\data\DataFilter::parseErrorMessage()

解析$errorMessages中由消息键指定的消息内容。

protected string parseErrorMessage ( $messageKey, $params = [] )
$messageKey string

消息键。

$params array

要解析到消息中的参数。

返回值 string

组合的消息字符串。

                protected function parseErrorMessage($messageKey, $params = [])
{
    $messages = $this->getErrorMessages();
    if (isset($messages[$messageKey])) {
        $message = $messages[$messageKey];
    } else {
        $message = Yii::t('yii', 'The format of {filter} is invalid.');
    }
    $params = array_merge(
        [
            'filter' => $this->getAttributeLabel($this->filterAttributeName),
        ],
        $params
    );
    return Yii::$app->getI18n()->format($message, $params, Yii::$app->language);
}

            
resolveFields() 受保护方法

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

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

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

protected array resolveFields ( array $fields, array $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\data\DataFilter::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() 等函数将父规则与子规则合并。

public array rules ( )
返回值 array

验证规则

                public function rules()
{
    return [
        [$this->filterAttributeName, 'validateFilter', 'skipOnEmpty' => false],
    ];
}

            
safeAttributes() 公共方法

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

返回在当前场景中可以批量分配的安全属性名称。

public string[] 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;
}

            
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);
            }
        }
    }
}

            
setErrorMessages() 公共方法

定义于: yii\data\DataFilter::setErrorMessages()

设置响应无效过滤器结构的错误消息列表,格式为:[errorKey => message]

消息可能包含占位符,这些占位符将根据消息上下文填充。对于每个消息,都提供了一个 {filter} 占位符,用于引用 $filterAttributeName 属性的标签。

public void setErrorMessages ( $errorMessages )
$errorMessages array|Closure

[errorKey => message] 格式的错误消息,或返回它们的 PHP 回调函数。

                public function setErrorMessages($errorMessages)
{
    if (is_array($errorMessages)) {
        $errorMessages = array_merge($this->defaultErrorMessages(), $errorMessages);
    }
    $this->_errorMessages = $errorMessages;
}

            
setFilter() 公共方法
public void setFilter ( $filter )
$filter mixed

原始过滤值。

                public function setFilter($filter)
{
    $this->_filter = $filter;
}

            
setScenario() 公共方法

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

设置模型的场景。

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

public void setScenario ( $value )
$value string

此模型所在的场景。

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

            
setSearchAttributeTypes() 公共方法
public void setSearchAttributeTypes ( $searchAttributeTypes )
$searchAttributeTypes array|null

搜索属性类型映射。

                public function setSearchAttributeTypes($searchAttributeTypes)
{
    $this->_searchAttributeTypes = $searchAttributeTypes;
}

            
setSearchModel() 公共方法
public void setSearchModel ( $model )
$model yii\base\Model|数组|字符串|可调用

模型实例或其与 DI 兼容的配置。

抛出 yii\base\InvalidConfigException

在配置无效时。

                public function setSearchModel($model)
{
    if (is_object($model) && !$model instanceof Model && !$model instanceof \Closure) {
        throw new InvalidConfigException('`' . get_class($this) . '::$searchModel` should be an instance of `' . Model::className() . '` or its DI compatible configuration.');
    }
    $this->_searchModel = $model;
}

            
toArray() 公共方法

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

将模型转换为数组。

此方法首先通过调用 resolveFields() 来确定要包含在结果数组中的字段。然后,它将模型转换为包含这些字段的数组。如果 $recursive 为真,则任何嵌入式对象也将转换为数组。当嵌入式对象为 yii\base\Arrayable 时,它们的相应嵌套字段将被提取并传递给 toArray()

如果模型实现了 yii\web\Linkable 接口,则结果数组也将具有一个 _link 元素,该元素引用由接口指定的链接列表。

public 数组 toArray ( 数组 $fields = [], 数组 $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);
}

            
validate() 公共方法

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

执行数据验证。

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

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

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

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

public 布尔值 validate ( $attributeNames null, $clearErrors true )
$attributeNames 字符串[]|字符串|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();
}

            
validateAttributeCondition() 受保护的方法

定义于: yii\data\DataFilter::validateAttributeCondition()

验证特定属性的搜索条件。

protected void validateAttributeCondition ( $attribute, $condition )
$attribute string

搜索属性名称。

$condition mixed

搜索条件。

                protected function validateAttributeCondition($attribute, $condition)
{
    $attributeTypes = $this->getSearchAttributeTypes();
    if (!isset($attributeTypes[$attribute])) {
        $this->addError($this->filterAttributeName, $this->parseErrorMessage('unknownAttribute', ['attribute' => $attribute]));
        return;
    }
    if (is_array($condition)) {
        $operatorCount = 0;
        foreach ($condition as $rawOperator => $value) {
            if (isset($this->filterControls[$rawOperator])) {
                $operator = $this->filterControls[$rawOperator];
                if (isset($this->operatorTypes[$operator])) {
                    $operatorCount++;
                    $this->validateOperatorCondition($rawOperator, $value, $attribute);
                }
            }
        }
        if ($operatorCount > 0) {
            if ($operatorCount < count($condition)) {
                $this->addError($this->filterAttributeName, $this->parseErrorMessage('invalidAttributeValueFormat', ['attribute' => $attribute]));
            }
        } else {
            // attribute may allow array value:
            $this->validateAttributeValue($attribute, $condition);
        }
    } else {
        $this->validateAttributeValue($attribute, $condition);
    }
}

            
validateAttributeValue() 受保护的方法

定义于: yii\data\DataFilter::validateAttributeValue()

model的范围内验证属性值。

protected void validateAttributeValue ( $attribute, $value )
$attribute string

属性名称。

$value mixed

属性值。

                protected function validateAttributeValue($attribute, $value)
{
    $model = $this->getSearchModel();
    if (!$model->isAttributeSafe($attribute)) {
        $this->addError($this->filterAttributeName, $this->parseErrorMessage('unknownAttribute', ['attribute' => $attribute]));
        return;
    }
    $model->{$attribute} = $value === $this->nullValue ? null : $value;
    if (!$model->validate([$attribute])) {
        $this->addError($this->filterAttributeName, $model->getFirstError($attribute));
        return;
    }
}

            
validateBlockCondition() 受保护的方法

定义于: yii\data\DataFilter::validateBlockCondition()

验证由单个条件组成的块条件。

这涵盖了诸如 not 之类的运算符。

protected void validateBlockCondition ( $operator, $condition )
$operator string

原始运算符控制关键字。

$condition mixed

原始条件。

                protected function validateBlockCondition($operator, $condition)
{
    $this->validateCondition($condition);
}

            
validateCondition() 受保护的方法

定义于: yii\data\DataFilter::validateCondition()

验证过滤器条件。

受保护的 void validateCondition ( $condition )
$condition mixed

原始筛选条件。

                protected function validateCondition($condition)
{
    if (!is_array($condition)) {
        $this->addError($this->filterAttributeName, $this->parseErrorMessage('invalidFilter'));
        return;
    }
    if (empty($condition)) {
        return;
    }
    foreach ($condition as $key => $value) {
        $method = 'validateAttributeCondition';
        if (isset($this->filterControls[$key])) {
            $controlKey = $this->filterControls[$key];
            if (isset($this->conditionValidators[$controlKey])) {
                $method = $this->conditionValidators[$controlKey];
            }
        }
        $this->$method($key, $value);
    }
}

            
validateConjunctionCondition() 受保护的方法

定义于: yii\data\DataFilter::validateConjunctionCondition()

验证由多个独立条件组成的连接条件。

这涵盖了诸如 andor 之类的运算符。

受保护的 void validateConjunctionCondition ( $operator, $condition )
$operator string

原始运算符控制关键字。

$condition mixed

原始条件。

                protected function validateConjunctionCondition($operator, $condition)
{
    if (!is_array($condition) || !ArrayHelper::isIndexed($condition)) {
        $this->addError($this->filterAttributeName, $this->parseErrorMessage('operatorRequireMultipleOperands', ['operator' => $operator]));
        return;
    }
    foreach ($condition as $part) {
        $this->validateCondition($part);
    }
}

            
validateFilter() 公共方法

定义于: yii\data\DataFilter::validateFilter()

验证过滤器属性值以匹配过滤器条件规范。

公共的 void validateFilter ( )

                public function validateFilter()
{
    $value = $this->getFilter();
    if ($value !== null) {
        $this->validateCondition($value);
    }
}

            
validateMultiple() 公共静态方法

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

验证多个模型。

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

公共静态 布尔值 validateMultiple ( $models, $attributeNames null )
$models array

要验证的模型

$attributeNames array|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;
}

            
validateOperatorCondition() 受保护的方法

定义于: yii\data\DataFilter::validateOperatorCondition()

验证运算符条件。

受保护的 void validateOperatorCondition ( $operator, $condition, $attribute null )
$operator string

原始运算符控制关键字。

$condition mixed

属性条件。

$attribute 字符串|

属性名称。

                protected function validateOperatorCondition($operator, $condition, $attribute = null)
{
    if ($attribute === null) {
        // absence of an attribute indicates that operator has been placed in a wrong position
        $this->addError($this->filterAttributeName, $this->parseErrorMessage('operatorRequireAttribute', ['operator' => $operator]));
        return;
    }
    $internalOperator = $this->filterControls[$operator];
    // check operator type :
    $operatorTypes = $this->operatorTypes[$internalOperator];
    if ($operatorTypes !== '*') {
        $attributeTypes = $this->getSearchAttributeTypes();
        $attributeType = $attributeTypes[$attribute];
        if (!in_array($attributeType, $operatorTypes, true)) {
            $this->addError($this->filterAttributeName, $this->parseErrorMessage('unsupportedOperatorType', ['attribute' => $attribute, 'operator' => $operator]));
            return;
        }
    }
    if (in_array($internalOperator, $this->multiValueOperators, true)) {
        // multi-value operator:
        if (!is_array($condition)) {
            $this->addError($this->filterAttributeName, $this->parseErrorMessage('operatorRequireMultipleOperands', ['operator' => $operator]));
        } else {
            foreach ($condition as $v) {
                $this->validateAttributeValue($attribute, $v);
            }
        }
    } else {
        // single-value operator :
        $this->validateAttributeValue($attribute, $condition);
    }
}