Class 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
Uses 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() 方法.

Note: 这是一个基类. 它的 build() 实现仅返回标准化的 $filter 值. 为了将过滤器转换为特定的格式, 你应该使用此类的后代, 该类相应的实现 buildInternal() 方法.

参见 yii\data\ActiveDataFilter.

公共属性

隐藏继承的属性

属性类型描述定义在
$activeValidators yii\validators\Validator[] 适用于当前 场景 的验证器. 该属性是只读的. yii\base\Model
$attributeMap array 搜索条件中要使用的实际属性名称, 格式为: [filterAttribute => actualAttribute]. yii\data\DataFilter
$attributes array 属性值(name => value). yii\base\Model
$behaviors yii\base\Behavior[] 附加到此组件的行为列表. 该属性是只读的. yii\base\Component
$conditionValidators array 将过滤条件关键字映射到验证方法. yii\data\DataFilter
$errorMessages array 错误消息格式为[errorKey => message]. 请注意, 此属性的类型在 getter 和 setter 中不同. 有关详细信息,请参见 getErrorMessages()setErrorMessages(). yii\data\DataFilter
$errors array 所有属性的错误数组. 结果是一个二维数组. 如果没有错误, 则返回空数组. 有关详细说明,请参阅 getErrors(). 该属性是只读的. 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 此模型所在的场景. 默认为: SCENARIO_DEFAULT. yii\base\Model
$searchAttributeTypes array 搜索属性类型映射. 请注意, 此属性的类型在 getter 和 setter 中不同. 有关详细信息,请参见 getSearchAttributeTypes()setSearchAttributeTypes(). yii\data\DataFilter
$searchModel yii\base\Model 模型实例. 请注意, 此属性的类型在 getter 和 setter 中不同. 有关详细信息,请参见 getSearchModel()setSearchModel(). yii\data\DataFilter
$validators ArrayObject|yii\validators\Validator[] 所有在模型中声明的验证器. 该属性是只读的. yii\base\Model

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的指定的方法. yii\base\Component
__clone() 在通过克隆现有对象创建对象之后调用此方法. yii\base\Component
__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() 返回适用于当前 场景 的验证器. 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() 返回静态类实例, 该实例可用于获取元信息(meta). 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() 从给定根字段的字段集合中提取嵌套字段. 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 public 属性

搜索条件中要使用的实际属性名称, 格式为: [filterAttribute => actualAttribute].

例如, 在搜索查询中使用表连接的情况下, 属性映射可能如下所示:

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

属性映射将应用于 normalize() 方法中的过滤条件.

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

将过滤条件关键字映射到验证方法.

validateCondition() 使用这些方法来验证原始过滤条件.

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

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

public array $errorMessages null
$filter public 属性

原始过滤器值.

public mixed $filter null
$filterAttributeLabel public 属性

通过 $filterAttributeName 指定的过滤器属性的标签.

将在编写错误消息期间使用它.

$filterAttributeName public 属性

处理过滤器值的属性的名称.

该名称用于通过 load() 方法加载数据.

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

可以在过滤器中使用的关键字或表达式.

数组键是从用户请求获取的原始过滤器值中使用的表达式. 数组值是在此类方法中使用的内部构建键.

任何未指定的关键字都不会被识别为过滤器控件, 并将被视为属性名称. 因此, 你应该避免控制关键字和属性名称之间的冲突.

例如: 如果你有控制关键字like和一个名为like的属性, 则无法为该属性指定条件.

你可以为同一个过滤器构建键指定多个关键字, 从而创建多个别名. 例如:

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

Note: 在指定过滤器控件时, 请牢记你的 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 属性

运算符关键字列表, 应该接受多个值.

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

如果不能使用后者, 则表示为字符串"null"而不是文字的null.

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

指定每个运算符支持的搜索属性类型列表.

该字段的格式应为: operatorKeyword' => ['type1', 'type2' ...].

支持的类型列表可以指定为*, 表示运算符支持所有可用的类型.

任何未指定的关键字都不会被视为有效的运算符.

public array $operatorTypes = ['<' => [self::TYPE_INTEGERself::TYPE_FLOATself::TYPE_DATETIMEself::TYPE_DATEself::TYPE_TIME], '>' => [self::TYPE_INTEGERself::TYPE_FLOATself::TYPE_DATETIMEself::TYPE_DATEself::TYPE_TIME], '<=' => [self::TYPE_INTEGERself::TYPE_FLOATself::TYPE_DATETIMEself::TYPE_DATEself::TYPE_TIME], '>=' => [self::TYPE_INTEGERself::TYPE_FLOATself::TYPE_DATETIMEself::TYPE_DATEself::TYPE_TIME], '=' => '*''!=' => '*''IN' => '*''NOT IN' => '*''LIKE' => [self::TYPE_STRING]]
$searchAttributeTypes public 属性

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

$searchModel public 属性

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

方法详情

__get() public 方法

返回组件属性的值.

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

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

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

public mixed __get ( $name )
$name string

属性名称.

return mixed

属性值或行为属性的值.

throws yii\base\UnknownPropertyException

如果该属性未定义.

throws yii\base\InvalidCallException

如果该属性是只写的.

__isset() public 方法

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

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

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

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

public boolean __isset ( $name )
$name string

属性名称或事件名称.

return boolean

Whether 指定的属性是否已设置.

__set() public 方法

设置组件属性的值.

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

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

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

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

属性名称或事件名称.

$value mixed

属性的值.

throws yii\base\UnknownPropertyException

如果该属性未定义.

throws yii\base\InvalidCallException

如果该属性是只读的.

__unset() public 方法

将组件属性设置为null.

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

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

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

public void __unset ( $name )
$name string

属性名称.

throws yii\base\InvalidCallException

如果该属性是只读的.

attributeLabels() public 方法

返回属性标签列表.

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

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

Note: 为了继承在父类中定义的标签, 子类需要使用诸如array_merge()之类的函数将父标签与子标签进行合并.

public array attributeLabels ( )
return array

属性的标签列表(name => label).

attributes() public 方法

返回属性名称的列表.

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

public array attributes ( )
return array

属性名称列表.

build() public 方法

构建实际的过滤器规范表单 $filter 值.

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

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

return mixed|false

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

buildInternal() protected 方法

执行实际的过滤器构建.

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

protected mixed buildInternal ( )
return mixed

构建实际的过滤器值.

canGetProperty() public 方法

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

在以下情况下, 属性是可读的:

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

属性名称.

$checkVars boolean

是否将成员变量视为属性.

$checkBehaviors boolean

是否将行为的属性视为该组件的属性.

return boolean

属性是否可读取.

canSetProperty() public 方法

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

在以下情况下, 属性是可设置的:

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

属性名称.

$checkVars boolean

是否将成员变量视为属性.

$checkBehaviors boolean

是否将行为的属性视为该组件的属性.

return boolean

方法是否可设置.

defaultErrorMessages() protected 方法

返回 $errorMessages 的默认值.

protected array defaultErrorMessages ( )
return array

默认的错误信息, 格式为[errorKey => message].

detectSearchAttributeType() protected 方法 (可用自版本: 2.0.14)

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

protected string|null detectSearchAttributeType ( yii\validators\Validator $validator )
$validator
return string|null

检测到的属性类型.

detectSearchAttributeTypes() protected 方法

根据 $searchModel 验证规则为 $searchAttributeTypes 组成默认值.

protected array detectSearchAttributeTypes ( )
return array

属性类型映射.

filterAttributeValue() protected 方法

验证 $searchModel 范围内的属性值, 并应用属性值过滤器(如果有).

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

属性名称.

$value mixed

属性值.

return mixed

过滤的属性值.

formName() public 方法

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

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

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

默认情况下, 此方法返回模型类名(不包括命名空间部分)作为表单名称. 当模型以不同形式使用时, 你可以覆盖它.

public string formName ( )
return string

该模型类的表单名称.

throws yii\base\InvalidConfigException

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

getErrorMessages() public 方法

public array getErrorMessages ( )
return array

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

getFilter() public 方法

返回原始过滤器值.

public mixed getFilter ( )
return mixed

原始过滤器值.

getSearchAttributeTypes() public 方法

返回搜索属性类型映射.

public array getSearchAttributeTypes ( )
return array

搜索属性类型映射.

getSearchModel() public 方法

返回搜索模型实例.

public yii\base\Model getSearchModel ( )
return yii\base\Model

模型实例.

throws yii\base\InvalidConfigException

配置无效.

normalize() public 方法

标准化滤波器值, 根据 $filterControls$attributeMap 替换原始键.

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

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

return array|boolean

标准化的过滤器值, 如果验证失败, 则返回false.

parseErrorMessage() protected 方法

从消息键指定的 $errorMessages 解析消息的内容.

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

消息的键.

$params array

要解析到消息中的参数.

return string

组成的信息串.

rules() public 方法

返回属性的验证规则.

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

每个规则都是具有以下结构的数组:

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

其中

  • 属性列表: required, 指定要验证的属性数组, 对于单个属性, 你可以传递一个字符串;
  • 验证器类型: required, 指定要使用的验证器. 它可以是内置的验证器名称, 模型类的方法名称, 匿名函数或验证器类名称.
  • on: optional, 指定可以在其中应用验证规则的 场景 数组. 如果未设置此选项, 则该规则将适用于所有场景.
  • 可以指定其它的 name-value 对来初始化相应的验证器属性. 有关可能的属性, 请参阅各个验证器类 API.

验证器可以是扩展自 yii\validators\Validator 的类的对象, 也可以是具有以下签名的模型类方法(称为 内联验证器(inline validator)):

// $params 指的是规则中给出的验证参数
function validatorName($attribute, $params)

上面的$attribute指的是当前正在验证的属性, 而$params则包含一组验证器配置选项, 例如string验证器中的max. 当做正在验证的属性的值可以通过$this->$attribute来访问,

Note: attribute之前的$符号, 这将获取变量$attribute的值, 并将其用作要访问的属性的名称.

Yii 还提供了一组 内置验证器. 每个验证器都有一个别名, 可以在指定验证规则时使用.

以下是一些例子:

[
    // 内置验证器: "required"
    [['username', 'password'], 'required'],
    // 内置验证器: "string",  用"min"和"max"属性定制
    ['username', 'string', 'min' => 3, 'max' => 12],
    // 内置验证器: "compare", 仅在"register"场景中使用
    ['password', 'compare', 'compareAttribute' => 'password2', 'on' => 'register'],
    // 通过模型类中的 "authenticate()" 方法定义的内联验证器, 仅在"login"场景中使用
    ['password', 'authenticate', 'on' => 'login'],
    // 使用类验证器: "DateRangeValidator"
    ['dateRange', 'DateRangeValidator'],
];

Note: 为了继承父类中定义的规则, 子类需要使用诸如array_merge()之类的函数将父规则与子规则进行合并.

public array rules ( )
return array

验证规则.

setErrorMessages() public 方法

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

消息可能包含占位符, 具体取决于消息的上下文. 对于每条消息, 引用 $filterAttributeName 属性的标签时, 可以使用{filter}占位符.

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

格式为[errorKey => message]的错误消息, 或者返回它们的 PHP 回调.

setFilter() public 方法

设置原始过滤器值.

public void setFilter ( $filter )
$filter mixed

原始过滤器值.

setSearchAttributeTypes() public 方法

设置搜索属性类型映射.

public void setSearchAttributeTypes ( $searchAttributeTypes )
$searchAttributeTypes array|null

搜索属性类型映射.

setSearchModel() public 方法

设置返回搜索模型实例.

public void setSearchModel ( $model )
$model yii\base\Model|array|string|callable

模型实例或其 DI 兼容配置.

throws yii\base\InvalidConfigException

配置无效.

validateAttributeCondition() protected 方法

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

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

搜索属性名称.

$condition mixed

搜索条件.

validateAttributeValue() protected 方法

验证 model 范围内的属性值.

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

属性名称.

$value mixed

属性值.

validateBlockCondition() protected 方法

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

它涵盖了诸如not的操作符.

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

原始运算符控制关键字.

$condition mixed

源条件.

validateCondition() protected 方法

验证过滤条件.

protected void validateCondition ( $condition )
$condition mixed

原始过滤条件.

validateConjunctionCondition() protected 方法

建立由多个独立的条件组成的联合条件.

它涵盖了诸如andor的操作符.

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

原始运算符控制关键字.

$condition mixed

源条件.

validateFilter() public 方法

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

public void validateFilter ( )
validateOperatorCondition() protected 方法

验证运算符条件.

protected void validateOperatorCondition ( $operator, $condition, $attribute null )
$operator string

原始运算符控制关键字.

$condition mixed

属性条件.

$attribute string

属性名称.