0 关注者

类 yii\data\DataFilter

继承关系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
子类yii\data\ActiveDataFilter
可用版本2.0.13
源代码 https://github.com/yiisoft/yii2/blob/master/framework/data/DataFilter.php

DataFilter 是一个特殊的 yii\base\Model,用于处理查询过滤规范。

它允许验证和构建通过请求传递的过滤器条件。

过滤器示例

{
    "or": [
        {
            "and": [
                {
                    "name": "some name",
                },
                {
                    "price": "25",
                }
            ]
        },
        {
            "id": {"in": [2, 5, 9]},
            "price": {
                "gt": 10,
                "lt": 50
            }
        }
    ]
}

在请求中,过滤器应使用与 $filterAttributeName 相同的键名指定。因此,实际的 HTTP 请求主体将如下所示

{
    "filter": {"or": {...}},
    "page": 2,
    ...
}

原始过滤器值应分配给模型的 $filter 属性。您可以通过 load() 方法从请求数据中填充它

use yii\data\DataFilter;

$dataFilter = new DataFilter();
$dataFilter->load(Yii::$app->request->getBodyParams());

为了使此类正常工作,它需要一个通过 $searchModel 指定的搜索模型。此搜索模型应声明所有可用的搜索属性及其验证规则。例如

class SearchModel extends \yii\base\Model
{
    public $id;
    public $name;

    public function rules()
    {
        return [
            [['id', 'name'], 'trim'],
            ['id', 'integer'],
            ['name', 'string'],
        ];
    }
}

为了减少类的数量,您可以使用 yii\base\DynamicModel 实例作为 $searchModel。在这种情况下,您应该使用 PHP 可调用对象来指定 $searchModel

function () {
    return (new \yii\base\DynamicModel(['id' => null, 'name' => null]))
        ->addRule(['id', 'name'], 'trim')
        ->addRule('id', 'integer')
        ->addRule('name', 'string');
}

您可以使用 validate() 方法检查过滤器值是否有效。如果验证失败,您可以使用 getErrors() 获取实际的错误消息。

为了获取适合于获取数据的过滤器条件,请使用 build() 方法。

注意:这是一个基类。它对 build() 的实现只是返回规范化的 $filter 值。为了将过滤器转换为特定格式,您应该使用此类的子类,该子类相应地实现了 buildInternal() 方法。

另请参阅 yii\data\ActiveDataFilter

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$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
$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
$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() 检查属性是否已设置,即已定义且不为 null。 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

受保护方法

隐藏继承的方法

方法 描述 定义于
buildInternal() 执行实际的过滤器构建。 yii\data\DataFilter
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

属性详细信息

隐藏继承的属性

$attributeMap 公共属性

在搜索条件中使用的实际属性名称,格式为:[filterAttribute => actualAttribute]。例如,在搜索查询中使用表联接的情况下,属性映射可能如下所示

[
    'authorName' => '{{author}}.[[name]]'
]

属性映射将在 normalize() 方法中应用于过滤器条件。

public array $attributeMap = []
$conditionValidators 公共属性

将过滤器条件关键字映射到验证方法。这些方法由 validateCondition() 用于验证原始过滤器条件。

public array $conditionValidators = [
    
'AND' => 'validateConjunctionCondition',
    
'OR' => 'validateConjunctionCondition',
    
'NOT' => 'validateBlockCondition',
    
'<' => 'validateOperatorCondition',
    
'>' => 'validateOperatorCondition',
    
'<=' => 'validateOperatorCondition',
    
'>=' => 'validateOperatorCondition',
    
'=' => 'validateOperatorCondition',
    
'!=' => 'validateOperatorCondition',
    
'IN' => 'validateOperatorCondition',
    
'NOT IN' => 'validateOperatorCondition',
    
'LIKE' => 'validateOperatorCondition',
]
$errorMessages 公共属性

格式为 [errorKey => message] 的错误消息。请注意,此属性在 getter 和 setter 中的类型不同。有关详细信息,请参阅 getErrorMessages()setErrorMessages()

public array $errorMessages null
$filter 公共属性

原始过滤器值。

public mixed $filter null
$filterAttributeLabel 公共属性

通过 $filterAttributeName 指定的过滤属性的标签。它将在错误消息组合期间使用。

$filterAttributeName 公共属性

处理过滤值的属性的名称。此名称用于通过 load() 方法加载数据。

public string $filterAttributeName 'filter'
$filterControls 公共属性

可以在过滤器中使用的关键字或表达式。数组键是从用户请求中获得的原始过滤值中使用的表达式。数组值是在此类方法中使用的内部构建键。

任何未指定的关键字将不会被识别为过滤器控件,并将被视为属性名称。因此,您应该避免控件关键字和属性名称之间的冲突。例如:如果您有控件关键字“like”和一个名为“like”的属性,则指定此类属性的条件将是不可能的。

您可以为同一个过滤器构建键指定多个关键字,创建多个别名。例如

[
    'eq' => '=',
    '=' => '=',
    '==' => '=',
    '===' => '=',
    // ...
]

注意:在指定过滤器控件时,请牢记您的 API 使用的实际数据交换格式。确保每个指定的控件关键字对格式有效。例如,在 XML 中,标签名称只能以字母字符开头,因此像 >=$gt 这样的控件会破坏 XML 架构。

public array $filterControls = [
    
'and' => 'AND',
    
'or' => 'OR',
    
'not' => 'NOT',
    
'lt' => '<',
    
'gt' => '>',
    
'lte' => '<=',
    
'gte' => '>=',
    
'eq' => '=',
    
'neq' => '!=',
    
'in' => 'IN',
    
'nin' => 'NOT IN',
    
'like' => 'LIKE',
]
$multiValueOperators 公共属性

运算符关键字列表,这些关键字应接受多个值。

public array $multiValueOperators = [
    
'IN',
    
'NOT IN',
]
$nullValue 公共属性 (自版本 2.0.40 起可用)

null 的表示形式,而不是在无法使用后者的前提下使用文字 null

public string $nullValue 'NULL'
$operatorTypes 公共属性

指定每个运算符支持的搜索属性类型列表。此字段应采用以下格式:'operatorKeyword' => ['type1', 'type2' ...]。支持的类型列表可以指定为 *,表示运算符支持所有可用的类型。任何未指定的关键字将不会被视为有效运算符。

public array $operatorTypes = [
    
'<' => [
        
self::TYPE_INTEGER,
        
self::TYPE_FLOAT,
        
self::TYPE_DATETIME,
        
self::TYPE_DATE,
        
self::TYPE_TIME,
    ],
    
'>' => [
        
self::TYPE_INTEGER,
        
self::TYPE_FLOAT,
        
self::TYPE_DATETIME,
        
self::TYPE_DATE,
        
self::TYPE_TIME,
    ],
    
'<=' => [
        
self::TYPE_INTEGER,
        
self::TYPE_FLOAT,
        
self::TYPE_DATETIME,
        
self::TYPE_DATE,
        
self::TYPE_TIME,
    ],
    
'>=' => [
        
self::TYPE_INTEGER,
        
self::TYPE_FLOAT,
        
self::TYPE_DATETIME,
        
self::TYPE_DATE,
        
self::TYPE_TIME,
    ],
    
'=' => '*',
    
'!=' => '*',
    
'IN' => '*',
    
'NOT IN' => '*',
    
'LIKE' => [
        
self::TYPE_STRING,
    ],
]
$searchAttributeTypes 公共属性

搜索属性类型映射。请注意,此属性在 getter 和 setter 中的类型不同。有关详细信息,请参阅 getSearchAttributeTypes()setSearchAttributeTypes()

$searchModel 公共属性

模型实例。请注意,此属性在 getter 和 setter 中的类型不同。有关详细信息,请参阅 getSearchModel()setSearchModel()

方法详情

隐藏继承的方法

__call() 公共方法

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

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

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

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

public 混合 __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() 公共方法

返回组件属性的值。

此方法将按以下顺序检查并采取相应措施

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

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

public 混合 __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() 公共方法

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

此方法将按以下顺序检查并采取相应措施

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

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

public 布尔值 __isset ( $name )
$name string

属性名或事件名

返回值 布尔值

指定的属性是否已设置

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

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

将组件属性设置为 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 字符串[] 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 ( 数组 $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 字符串|数组|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,我们可以声明一个标签,它更用户友好,并且可以显示给最终用户。

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

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

public 数组 attributeLabels ( )
返回值 array

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

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

            
attributes() 公共方法

返回属性名称列表。

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

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

属性名称列表。

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

            
beforeValidate() 公共方法

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

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

默认实现会触发一个beforeValidate事件。您可以重写此方法来执行验证前的初步检查。请确保调用父类实现,以便能够触发事件。

public 布尔值 beforeValidate ( )
返回值 布尔值

是否应执行验证。默认为 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 [];
}

            
build() 公共方法

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

public 混合|布尔值false build ( $runValidation true )
$runValidation 布尔值

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

返回值 混合|布尔值false

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

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

            
buildInternal() 受保护的方法

执行实际的过滤器构建。

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

protected 混合 buildInternal ( )
返回值 mixed

构建的实际过滤器值。

                protected function buildInternal()
{
    return $this->normalize(false);
}

            
canGetProperty() 公共方法

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

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

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

属性名

$checkVars 布尔值

是否将成员变量视为属性

$checkBehaviors 布尔值

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

返回值 布尔值

属性是否可读

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

            
canSetProperty() 公共方法

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

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

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

属性名

$checkVars 布尔值

是否将成员变量视为属性

$checkBehaviors 布尔值

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

返回值 布尔值

属性是否可写

                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()

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

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

此类的完全限定名称。

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

            
clearErrors() 公共方法

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

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

public void 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() 不同,每次调用此方法时,都会返回新的验证器列表。

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

            
defaultErrorMessages() 受保护方法

返回 $errorMessages 的默认值。

protected 数组 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() 方法。

public 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()

从组件中分离所有行为。

public void detachBehaviors ( )

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

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

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

protected 字符串| 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() 受保护方法

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

protected 数组 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() 受保护方法

$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\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 布尔值

布尔值,如果设置为 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 array 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 检查所有属性。

返回值 布尔值

是否存在任何错误。

                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

事件名称

返回值 布尔值

是否存在任何附加到事件的处理程序。

                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 布尔值

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

返回值 布尔值

方法是否已定义

                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 布尔值

是否将成员变量视为属性

$checkBehaviors 布尔值

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

返回值 布尔值

属性是否已定义

                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 布尔值

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

返回值 yii\data\DataFilter

类实例。

                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

属性名

返回值 布尔值

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

                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

属性名

返回值 布尔值

属性是否必填

                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

属性名

返回值 布尔值

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

                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 布尔型 load ( $data, $formName null )
$data array

要加载的数据数组,通常为 $_POST$_GET

$formName 字符串|

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

返回值 布尔值

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 布尔型 loadMultiple ( $models, $data, $formName null )
$models array

要填充的模型。请注意,所有模型都应具有相同的类。

$data array

数据数组。这通常是 $_POST$_GET,但也可能是最终用户提供的任何有效数组。

$formName 字符串|

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

返回值 布尔值

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

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

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

public array|boolean normalize ( $runValidation true )
$runValidation 布尔值

是否在规范化过滤器之前执行验证(调用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,则将删除附加到命名事件的所有处理程序。

返回值 布尔值

如果找到并分离了处理程序

                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

要检查的偏移量。

返回值 布尔值

偏移量是否存在。

                #[\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 布尔值

是否将新的事件处理程序附加到现有处理程序列表的末尾。如果为 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() 受保护的方法

解析 $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()中声明的那些字段,以确定可以返回哪些字段。

受保护 数组 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() 公共方法

返回属性的验证规则。

验证规则由 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() 等函数将父规则与子规则合并。

公共 数组 rules ( )
返回值 array

验证规则

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

            
safeAttributes() 公共方法

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

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

公共 字符串[] 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() 中找到的所有属性。每个场景都将与受应用于该场景的验证规则验证的属性相关联。

公共 数组 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()

以批量方式设置属性值。

另请参阅

公共 setAttributes ( $values, $safeOnly true )
$values array

要分配给模型的属性值(名称 => 值)。

$safeOnly 布尔值

是否应仅对安全属性执行赋值。安全属性是与当前 $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() 公共方法

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

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

公共 setErrorMessages ( $errorMessages )
$errorMessages 数组|闭包

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

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

            
setFilter() 公共方法

公共 setFilter ( $filter )
$filter mixed

原始过滤器值。

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

            
setScenario() 公共方法

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

设置模型的场景。

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

公共 setScenario ( $value )
$value string

此模型所在的场景。

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

            
setSearchAttributeTypes() 公共方法

公共 setSearchAttributeTypes ( $searchAttributeTypes )
$searchAttributeTypes array|null

搜索属性类型映射。

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

            
setSearchModel() 公共方法

公共 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 array toArray ( array $fields = [], array $expand = [], $recursive true )
$fields array

请求的字段。如果为空或包含“*”,则将返回 fields() 指定的所有字段。字段可以嵌套,用点 (.) 分隔。例如:item.field.sub-field $recursive 必须为 true 才能提取嵌套字段。如果 $recursive 为 false,则仅提取根字段。

$expand array

请求用于导出的其他字段。仅考虑 extraFields() 中声明的字段。Expand 也可以嵌套,用点 (.) 分隔。例如:item.expand1.expand2 $recursive 必须为 true 才能提取嵌套扩展。如果 $recursive 为 false,则仅提取根扩展。

$recursive 布尔值

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

返回值 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 boolean validate ( $attributeNames null, $clearErrors true )
$attributeNames string[]|string|null

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

$clearErrors 布尔值

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

返回值 布尔值

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

抛出异常 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() 受保护的方法

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

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() 受保护的方法

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() 受保护的方法

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

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

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

原始运算符控制关键字。

$condition mixed

原始条件。

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

            
validateCondition() 受保护的方法

验证过滤器条件。

protected 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() 受保护的方法

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

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

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

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

public void validateFilter ( )

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

            
validateMultiple() 公共静态方法

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

验证多个模型。

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

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

要验证的模型

$attributeNames array|null

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

返回值 布尔值

所有模型是否有效。如果一个或多个模型存在验证错误,则将返回 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() 受保护的方法

验证运算符条件。

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