0 关注者

类 yii\grid\DataColumn

继承关系yii\grid\DataColumn » yii\grid\Column » yii\base\BaseObject
实现yii\base\Configurable
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/grid/DataColumn.php

DataColumn 是 yii\grid\GridView 组件的默认列类型。

它用于显示数据列,并允许对它们进行 排序过滤

一个简单的 data column 定义引用了 GridView 数据提供者数据模型中的一个属性。属性名称由 $attribute 指定。

通过设置 $value$label,可以自定义标题和单元格内容。

data column 区分 数据单元格值数据单元格内容。单元格值是一个未格式化的值,可用于计算,而实际的单元格内容是该值的 格式化 版本,可能包含 HTML 标记。

有关 DataColumn 的更多详细信息和使用信息,请参阅 有关数据小部件的指南文章

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$attribute string 与该列关联的属性名称。 yii\grid\DataColumn
$content callable 这是一个可调用对象,用于生成每个单元格的内容。 yii\grid\Column
$contentOptions array|Closure 数据单元格标签的 HTML 属性。 yii\grid\Column
$enableSorting boolean 是否允许按该列排序。 yii\grid\DataColumn
$encodeLabel boolean 标题标签是否应进行 HTML 编码。 yii\grid\DataColumn
$filter string|array|null|false 表示用于该数据列的过滤器输入(例如文本字段、下拉列表)的 HTML 代码。 yii\grid\DataColumn
$filterAttribute string|null 与该列关联的 yii\grid\GridView::$filterModel 的属性名称。 yii\grid\DataColumn
$filterInputOptions array 过滤器输入字段的 HTML 属性。 yii\grid\DataColumn
$filterOptions array 过滤器单元格标签的 HTML 属性。 yii\grid\Column
$footer string 页脚单元格内容。 yii\grid\Column
$footerOptions array 页脚单元格标签的 HTML 属性。 yii\grid\Column
$format string|array|Closure 每个数据模型的值应以何种格式显示(例如 "raw""text""html"['date', 'php:Y-m-d'])。 yii\grid\DataColumn
$grid yii\grid\GridView 拥有该列的 grid view 对象。 yii\grid\Column
$header string|null 标题单元格内容。 yii\grid\Column
$headerOptions array 标题单元格标签的 HTML 属性。 yii\grid\Column
$label string|null 要显示在 标题单元格 中的标签,也用作对该列启用排序时排序链接标签。 yii\grid\DataColumn
$options array 列组标签的 HTML 属性。 yii\grid\Column
$sortLinkOptions array 对该列启用排序时,由 yii\data\Sort::link() 生成的标题单元格中的链接标签的 HTML 属性。 yii\grid\DataColumn
$value string|Closure|null 用于确定当前列中显示值的匿名函数或字符串。 yii\grid\DataColumn
$visible boolean 该列是否可见。 yii\grid\Column

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\BaseObject
__construct() 构造函数。 yii\base\BaseObject
__get() 返回对象属性的值。 yii\base\BaseObject
__isset() 检查属性是否已设置,即已定义且不为空。 yii\base\BaseObject
__set() 设置对象属性的值。 yii\base\BaseObject
__unset() 将对象属性设置为 null。 yii\base\BaseObject
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\BaseObject
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\BaseObject
className() 返回此类的完全限定名称。 yii\base\BaseObject
getDataCellValue() 返回数据单元格的值。 yii\grid\DataColumn
hasMethod() 返回一个值,指示方法是否已定义。 yii\base\BaseObject
hasProperty() 返回一个值,指示属性是否已定义。 yii\base\BaseObject
init() 初始化对象。 yii\grid\DataColumn
renderDataCell() 渲染数据单元格。 yii\grid\Column
renderFilterCell() 渲染过滤器单元格。 yii\grid\Column
renderFooterCell() 渲染页脚单元格。 yii\grid\Column
renderHeaderCell() 渲染标题单元格。 yii\grid\Column

受保护的方法

隐藏继承的方法

方法 描述 定义于
getHeaderCellLabel() 返回标题单元格标签。 yii\grid\DataColumn
renderDataCellContent() 渲染数据单元格内容。 yii\grid\DataColumn
renderFilterCellContent() 渲染过滤器单元格内容。 yii\grid\DataColumn
renderFooterCellContent() 渲染页脚单元格内容。 yii\grid\Column
renderHeaderCellContent() 渲染标题单元格内容。 yii\grid\DataColumn

属性详细信息

隐藏继承的属性

$attribute 公共属性

与该列关联的属性名称。当未指定 $content$value 时,将从每个数据模型中检索指定属性的值并显示。

此外,如果未指定 $label,则将显示与属性关联的标签。

public string $attribute null
$enableSorting 公共属性

是否允许按该列排序。如果为 true 且在 yii\grid\GridView::$dataProvider 的排序定义中找到 $attribute,则该列的标题单元格将包含一个链接,该链接在被点击时可能会触发排序。

public boolean $enableSorting true
$encodeLabel 公共属性 (版本 2.0.1 起可用)

标题标签是否应进行 HTML 编码。

另请参见 $label.

public boolean $encodeLabel true
$filter 公共属性

表示过滤输入(例如文本字段、下拉列表)的 HTML 代码,该代码用于此数据列。此属性仅在 yii\grid\GridView::$filterModel 设置时有效。

  • 如果未设置此属性,则会使用 $filterInputOptions 定义的属性生成文本字段作为过滤输入。有关如何生成活动输入标记的详细信息,请参见 yii\helpers\BaseHtml::activeInput()
  • 如果此属性是一个数组,则会生成一个下拉列表,该列表使用此属性值作为列表选项。
  • 如果您不希望此数据列使用过滤器,请将此值设置为 false。
public string|array|null|false $filter null
$filterAttribute 公共属性 (版本 2.0.41 起可用)

与该列关联的 yii\grid\GridView::$filterModel 的属性名称。如果未设置,将与 $attribute 的值相同。

$filterInputOptions 公共属性

过滤输入字段的 HTML 属性。此属性与 $filter 属性一起使用。当 $filter 未设置或是一个数组时,此属性将用于渲染生成的过滤输入字段的 HTML 属性。

默认值中的空 id 确保 id 不会从模型属性中获取,从而提供更好的性能。

有关如何渲染属性的详细信息,请参见 yii\helpers\Html::renderTagAttributes()

public array $filterInputOptions = [
    
'class' => 'form-control',
    
'id' => null,
]
$format 公共属性

每个数据模型的值应以何种格式显示(例如 "raw""text""html"['date', 'php:Y-m-d'])。支持的格式由 formatter 决定,该 formatteryii\grid\GridView 使用。默认格式为 "text",当使用 yii\i18n\Formatter 作为 GridView 的 formatter 时,它将以 HTML 编码的纯文本格式显示值。

另请参见 yii\i18n\Formatter::format()

public string|array|Closure $format 'text'
$label 公共属性

要显示在 表头单元格 中的标签,以及在为该列启用排序时用作排序链接标签。如果未设置,并且 GridView 数据提供程序提供的模型是 yii\db\ActiveRecord 的实例,则将使用 yii\db\ActiveRecord::getAttributeLabel() 确定标签。否则,将使用 yii\helpers\Inflector::camel2words() 获取标签。

public string|null $label null
$sortLinkOptions 公共属性

对该列启用排序时,由 yii\data\Sort::link() 生成的标题单元格中的链接标签的 HTML 属性。

有关如何渲染属性的详细信息,请参见 yii\helpers\Html::renderTagAttributes()

public array $sortLinkOptions = []
$value 公共属性

用于确定当前列中显示值的匿名函数或字符串。

如果这是一个匿名函数,它将为每行调用,并且返回值将用作每个数据模型的显示值。该函数的签名应为:function ($model, $key, $index, $column)。其中 $model$key$index 指的是当前正在渲染的行对应的模型、键和索引,而 $column 是对 yii\grid\DataColumn 对象的引用。

您也可以将此属性设置为一个字符串,该字符串表示要在此列中显示的属性名称。这可以在要显示的属性与用于排序和过滤的 $attribute 不同的情况下使用。

如果未设置,则将使用 $model[$attribute] 获取值,其中 $attribute$attribute 的值。

public string|Closure|null $value null

方法详情

隐藏继承的方法

__call() 公共方法

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

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

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

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

方法名称

$params array

方法参数

返回值 mixed

方法返回值

抛出 yii\base\UnknownMethodException

调用未知方法时

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

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

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

返回对象属性的值。

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

另见 __set()

public mixed __get ( $name )
$name string

属性名称

返回值 mixed

属性值

抛出 yii\base\UnknownPropertyException

如果属性未定义

抛出 yii\base\InvalidCallException

如果属性是只写属性

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public method

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

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

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

注意,如果属性未定义,将返回 false。

另见 https://php.ac.cn/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

属性名称或事件名称

返回值 boolean

命名的属性是否已设置(不为 null)。

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() public method

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

设置对象属性的值。

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

另见 __get()

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

属性名称或事件名称

$value mixed

属性值

抛出 yii\base\UnknownPropertyException

如果属性未定义

抛出 yii\base\InvalidCallException

如果属性是只读属性

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() public method

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

将对象属性设置为 null。

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

注意,如果属性未定义,此方法将不做任何事情。如果属性是只读属性,它将抛出一个异常。

另见 https://php.ac.cn/manual/en/function.unset.php

public void __unset ( $name )
$name string

属性名称

抛出 yii\base\InvalidCallException

如果属性是只读属性。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
canGetProperty() public method

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

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

属性可读,如果

  • 类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另见 canSetProperty()

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

属性名称

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

属性是否可读

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() public method

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

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

属性可写,如果

  • 类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另见 canGetProperty()

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

属性名称

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

属性是否可写

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
className() public static method
自 2.0.14 起已弃用。在 PHP >=5.5 上,请改用 ::class

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

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

public static string className ( )
返回值 string

此类的完全限定名称。

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

            
getDataCellValue() public method

返回数据单元格的值。

public string getDataCellValue ( $model, $key, $index )
$model mixed

数据模型

$key mixed

与数据模型关联的键

$index integer

数据模型在 yii\grid\GridView::$dataProvider 返回的模型数组中的从零开始的索引。

返回值 string

数据单元格值

                public function getDataCellValue($model, $key, $index)
{
    if ($this->value !== null) {
        if (is_string($this->value)) {
            return ArrayHelper::getValue($model, $this->value);
        }
        return call_user_func($this->value, $model, $key, $index, $this);
    } elseif ($this->attribute !== null) {
        return ArrayHelper::getValue($model, $this->attribute);
    }
    return null;
}

            
getHeaderCellLabel() protected method (available since version 2.0.8)

返回标题单元格标签。

此方法可被重写以自定义标题单元格的标签。

protected string getHeaderCellLabel ( )
返回值 string

标签

                protected function getHeaderCellLabel()
{
    $provider = $this->grid->dataProvider;
    if ($this->label === null) {
        if ($this->attribute === null) {
            $label = '';
        } elseif ($provider instanceof ActiveDataProvider && $provider->query instanceof ActiveQueryInterface) {
            /* @var $modelClass Model */
            $modelClass = $provider->query->modelClass;
            $model = $modelClass::instance();
            $label = $model->getAttributeLabel($this->attribute);
        } elseif ($provider instanceof ArrayDataProvider && $provider->modelClass !== null) {
            /* @var $modelClass Model */
            $modelClass = $provider->modelClass;
            $model = $modelClass::instance();
            $label = $model->getAttributeLabel($this->attribute);
        } elseif ($this->grid->filterModel !== null && $this->grid->filterModel instanceof Model) {
            $label = $this->grid->filterModel->getAttributeLabel($this->filterAttribute);
        } else {
            $models = $provider->getModels();
            if (($model = reset($models)) instanceof Model) {
                /* @var $model Model */
                $label = $model->getAttributeLabel($this->attribute);
            } else {
                $label = Inflector::camel2words($this->attribute);
            }
        }
    } else {
        $label = $this->label;
    }
    return $label;
}

            
hasMethod() public method

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

返回一个值,指示方法是否已定义。

默认实现是对 php 函数 method_exists() 的调用。当您实现 php 魔术方法 __call() 时,您可能需要重写此方法。

public boolean hasMethod ( $name )
$name string

方法名称

返回值 boolean

方法是否已定义

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() public method

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

返回一个值,指示属性是否已定义。

如果属性被定义,则满足以下条件:

  • 类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写)。
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另请参阅

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

属性名称

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

属性是否已定义

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

            
init() 公共方法

初始化对象。

此方法在对象使用给定配置初始化后,在构造函数结束时调用。

public void init ( )

                public function init()
{
    parent::init();
    if ($this->filterAttribute === null) {
        $this->filterAttribute = $this->attribute;
    }
}

            
renderDataCell() 公共方法

定义于: yii\grid\Column::renderDataCell()

渲染数据单元格。

public string renderDataCell ( $model, $key, $index )
$model mixed

正在渲染的数据模型

$key mixed

与数据模型关联的键

$index integer

数据项在 yii\grid\GridView::$dataProvider 返回的项目数组中的零基索引。

返回值 string

渲染结果

                public function renderDataCell($model, $key, $index)
{
    if ($this->contentOptions instanceof Closure) {
        $options = call_user_func($this->contentOptions, $model, $key, $index, $this);
    } else {
        $options = $this->contentOptions;
    }
    return Html::tag('td', $this->renderDataCellContent($model, $key, $index), $options);
}

            
renderDataCellContent() 受保护方法

渲染数据单元格内容。

protected string renderDataCellContent ( $model, $key, $index )
$model mixed

数据模型

$key mixed

与数据模型关联的键

$index integer

数据模型在 yii\grid\GridView::$dataProvider 返回的模型数组中的从零开始的索引。

返回值 string

渲染结果

                protected function renderDataCellContent($model, $key, $index)
{
    if ($this->content === null) {
        return $this->grid->formatter->format($this->getDataCellValue($model, $key, $index), $this->format);
    }
    return parent::renderDataCellContent($model, $key, $index);
}

            
renderFilterCell() 公共方法

定义于: yii\grid\Column::renderFilterCell()

渲染过滤器单元格。

public void renderFilterCell ( )

                public function renderFilterCell()
{
    return Html::tag('td', $this->renderFilterCellContent(), $this->filterOptions);
}

            
renderFilterCellContent() 受保护方法

渲染过滤器单元格内容。

默认实现只渲染一个空格。此方法可以被覆盖来定制过滤器单元格的渲染(如果有)。

protected string renderFilterCellContent ( )
返回值 string

渲染结果

                protected function renderFilterCellContent()
{
    if (is_string($this->filter)) {
        return $this->filter;
    }
    $model = $this->grid->filterModel;
    if ($this->filter !== false && $model instanceof Model && $this->filterAttribute !== null && $model->isAttributeActive($this->filterAttribute)) {
        if ($model->hasErrors($this->filterAttribute)) {
            Html::addCssClass($this->filterOptions, 'has-error');
            $error = ' ' . Html::error($model, $this->filterAttribute, $this->grid->filterErrorOptions);
        } else {
            $error = '';
        }
        if (is_array($this->filter)) {
            $options = array_merge(['prompt' => '', 'strict' => true], $this->filterInputOptions);
            return Html::activeDropDownList($model, $this->filterAttribute, $this->filter, $options) . $error;
        } elseif ($this->format === 'boolean') {
            $options = array_merge(['prompt' => '', 'strict' => true], $this->filterInputOptions);
            return Html::activeDropDownList($model, $this->filterAttribute, [
                1 => $this->grid->formatter->booleanFormat[1],
                0 => $this->grid->formatter->booleanFormat[0],
            ], $options) . $error;
        }
        $options = array_merge(['maxlength' => true], $this->filterInputOptions);
        return Html::activeTextInput($model, $this->filterAttribute, $options) . $error;
    }
    return parent::renderFilterCellContent();
}

            
renderFooterCell() 公共方法

定义于: yii\grid\Column::renderFooterCell()

渲染页脚单元格。

public void renderFooterCell ( )

                public function renderFooterCell()
{
    return Html::tag('td', $this->renderFooterCellContent(), $this->footerOptions);
}

            
renderFooterCellContent() 受保护方法

定义于: yii\grid\Column::renderFooterCellContent()

渲染页脚单元格内容。

默认实现只渲染 $footer。此方法可以被覆盖来定制页脚单元格的渲染。

protected string renderFooterCellContent ( )
返回值 string

渲染结果

                protected function renderFooterCellContent()
{
    return $this->footer !== null && trim($this->footer) !== '' ? $this->footer : $this->grid->emptyCell;
}

            
renderHeaderCell() 公共方法

定义于: yii\grid\Column::renderHeaderCell()

渲染标题单元格。

public void renderHeaderCell ( )

                public function renderHeaderCell()
{
    return Html::tag('th', $this->renderHeaderCellContent(), $this->headerOptions);
}

            
renderHeaderCellContent() 受保护方法

渲染标题单元格内容。

默认实现只渲染 $header。此方法可以被覆盖来定制表头单元格的渲染。

protected string renderHeaderCellContent ( )
返回值 string

渲染结果

                protected function renderHeaderCellContent()
{
    if ($this->header !== null || $this->label === null && $this->attribute === null) {
        return parent::renderHeaderCellContent();
    }
    $label = $this->getHeaderCellLabel();
    if ($this->encodeLabel) {
        $label = Html::encode($label);
    }
    if (
        $this->attribute !== null && $this->enableSorting &&
        ($sort = $this->grid->dataProvider->getSort()) !== false && $sort->hasAttribute($this->attribute)
    ) {
        return $sort->link($this->attribute, array_merge($this->sortLinkOptions, ['label' => $label]));
    }
    return $label;
}