0 关注者

类 yii\grid\ActionColumn

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

ActionColumn 是 yii\grid\GridView 组件的一列,用于显示查看和操作项目的按钮。

要将 ActionColumn 添加到 gridview,请将其添加到 columns 配置中,如下所示

'columns' => [
    // ...
    [
        'class' => ActionColumn::class,
        // you may configure additional properties here
    ],
]

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

公共属性

隐藏继承属性

属性 类型 描述 定义于
$buttonOptions array 将应用于 默认按钮 的 HTML 选项。 yii\grid\ActionColumn
$buttons array 按钮渲染回调函数。 yii\grid\ActionColumn
$content callable 这是一个可调用对象,将用于生成每个单元格的内容。 yii\grid\Column
$contentOptions array|Closure 数据单元格标签的 HTML 属性。 yii\grid\Column
$controller string|null 应处理此处指定的动作的控制器的 ID。 yii\grid\ActionColumn
$filterOptions array 过滤器单元格标签的 HTML 属性。 yii\grid\Column
$footer string 页脚单元格内容。 yii\grid\Column
$footerOptions array 页脚单元格标签的 HTML 属性。 yii\grid\Column
$grid yii\grid\GridView 拥有此列的 grid view 对象。 yii\grid\Column
$header string|null 表头单元格内容。 yii\grid\Column
$headerOptions array 表头单元格标签的 HTML 属性。 yii\grid\ActionColumn
$icons array 按钮图标。 yii\grid\ActionColumn
$options array 列组标签的 HTML 属性。 yii\grid\Column
$template string 用于组合操作列中每个单元格的模板。 yii\grid\ActionColumn
$urlCreator callable|null 一个回调函数,使用指定的模型信息创建按钮 URL。 yii\grid\ActionColumn
$visible boolean 此列是否可见。 yii\grid\Column
$visibleButtons array 每个按钮的可见性条件。 yii\grid\ActionColumn

公共方法

隐藏继承方法

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

受保护的方法

隐藏继承方法

方法 描述 定义于
getHeaderCellLabel() 返回表头单元格标签。 yii\grid\Column
initDefaultButton() 初始化单个按钮的默认按钮渲染回调函数。 yii\grid\ActionColumn
initDefaultButtons() 初始化默认按钮渲染回调函数。 yii\grid\ActionColumn
renderDataCellContent() 渲染数据单元格内容。 yii\grid\ActionColumn
renderFilterCellContent() 渲染过滤器单元格内容。 yii\grid\Column
renderFooterCellContent() 渲染页脚单元格内容。 yii\grid\Column
renderHeaderCellContent() 渲染表头单元格内容。 yii\grid\Column

属性详情

隐藏继承属性

$buttonOptions 公共属性 (自版本 2.0.4 起可用)

将应用于 默认按钮 的 HTML 选项。

public array $buttonOptions = []
$buttons 公共属性

按钮渲染回调函数。数组键是按钮名称(不带花括号),值是相应的按钮渲染回调函数。回调函数应使用以下签名

function ($url, $model, $key) {
    // return the button HTML code
}

其中 $url 是列为按钮创建的 URL,$model 是为当前行渲染的模型对象,$key 是数据提供程序数组中模型的键。

您可以为按钮添加更多条件,例如仅在模型可编辑时显示它(此处假设您有一个指示该状态的状态字段)

[
    'update' => function ($url, $model, $key) {
        return $model->status === 'editable' ? Html::a('Update', $url) : '';
    },
],
public array $buttons = []
$controller 公共属性

应处理此处指定操作的控制器的 ID。如果未设置,它将使用当前活动的控制器。此属性主要由 $urlCreator 用于为不同的操作创建 URL。此属性的值将作为前缀添加到每个操作名称,以形成操作的路由。

public 字符串|null $controller null
$headerOptions 公共属性

表头单元格标签的 HTML 属性。

public 数组 $headerOptions = [
    
'class' => 'action-column',
]
$icons 公共属性 (自版本 2.0.42 起可用)

按钮图标。数组键是图标名称,值是相应的 html: `php [

'eye-open' => '<svg ...></svg>',
'pencil' => Html::tag('span', '', ['class' => 'glyphicon glyphicon-pencil'])

] ` 默认使用 FontAwesome 5 免费 svg 图标。

另请参阅 https://fontawesome.com

public 数组 $icons = [
    
'eye-open' => '<svg aria-hidden="true" style="display:inline-block;font-size:inherit;height:1em;overflow:visible;vertical-align:-.125em;width:1.125em" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M573 241C518 136 411 64 288 64S58 136 3 241a32 32 0 000 30c55 105 162 177 285 177s230-72 285-177a32 32 0 000-30zM288 400a144 144 0 11144-144 144 144 0 01-144 144zm0-240a95 95 0 00-25 4 48 48 0 01-67 67 96 96 0 1092-71z"/></svg>',
    
'pencil' => '<svg aria-hidden="true" style="display:inline-block;font-size:inherit;height:1em;overflow:visible;vertical-align:-.125em;width:1em" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M498 142l-46 46c-5 5-13 5-17 0L324 77c-5-5-5-12 0-17l46-46c19-19 49-19 68 0l60 60c19 19 19 49 0 68zm-214-42L22 362 0 484c-3 16 12 30 28 28l122-22 262-262c5-5 5-13 0-17L301 100c-4-5-12-5-17 0zM124 340c-5-6-5-14 0-20l154-154c6-5 14-5 20 0s5 14 0 20L144 340c-6 5-14 5-20 0zm-36 84h48v36l-64 12-32-31 12-65h36v48z"/></svg>',
    
'trash' => '<svg aria-hidden="true" style="display:inline-block;font-size:inherit;height:1em;overflow:visible;vertical-align:-.125em;width:.875em" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M32 464a48 48 0 0048 48h288a48 48 0 0048-48V128H32zm272-256a16 16 0 0132 0v224a16 16 0 01-32 0zm-96 0a16 16 0 0132 0v224a16 16 0 01-32 0zm-96 0a16 16 0 0132 0v224a16 16 0 01-32 0zM432 32H312l-9-19a24 24 0 00-22-13H167a24 24 0 00-22 13l-9 19H16A16 16 0 000 48v32a16 16 0 0016 16h416a16 16 0 0016-16V48a16 16 0 00-16-16z"/></svg>',
]
$template 公共属性

用于组合操作列中每个单元格的模板。用花括号括起来的内容被视为控制器操作 ID(在操作列的上下文中也称为按钮名称)。它们将被替换为 $buttons 中指定的相应按钮渲染回调。例如,标记 {view} 将被回调 buttons['view'] 的结果替换。如果找不到回调,则标记将被替换为空字符串。

例如,要仅包含查看和更新按钮,您可以按如下方式将 ActionColumn 添加到您的 GridView 列中

['class' => 'yii\grid\ActionColumn', 'template' => '{view} {update}'],

另请参阅 $buttons

public 字符串 $template '{view} {update} {delete}'
$urlCreator 公共属性

一个回调,它使用指定的模型信息创建按钮 URL。回调的签名应与 createUrl() 的签名相同 自 2.0.10 起,它可以接受额外的参数,该参数引用列实例本身

function (string $action, mixed $model, mixed $key, integer $index, ActionColumn $this) {
    //return string;
}

如果未设置此属性,则将使用 createUrl() 创建按钮 URL。

public 可调用|null $urlCreator null
$visibleButtons 公共属性 (自版本 2.0.7 起可用)

每个按钮的可见性条件。数组键是按钮名称(不带花括号),值是布尔值 true/false 或匿名函数。当此数组中未指定按钮名称时,默认情况下将显示它。回调必须使用以下签名

function ($model, $key, $index) {
    return $model->status === 'editable';
}

或者您可以传递一个布尔值

[
    'update' => \Yii::$app->user->can('update'),
],
public 数组 $visibleButtons = []

方法详情

隐藏继承方法

__call() 公共方法

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

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

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

public 混合 __call ( $name, $params )
$name string

方法名称

$params array

方法参数

返回值 混合

方法返回值

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

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

返回对象属性的值。

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

另请参阅 __set()

public 混合 __get ( $name )
$name string

属性名称

返回值 混合

属性值

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

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

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

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

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

另请参阅 https://php.ac.cn/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

属性名称或事件名称

返回值 boolean

指定的属性是否已设置(非空)。

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

            
__set() 公共方法

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

设置对象属性的值。

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

另请参阅 __get()

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

属性名称或事件名称

$value 混合

属性值

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

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

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

定义于: 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() 公共静态方法
自 2.0.14 版本起已弃用。在 PHP >=5.5 中,请改用 ::class

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

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

public static string className ( )
返回值 string

此类的完全限定名称。

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

            
createUrl() 公共方法

为给定的操作和模型创建 URL。

此方法为每个按钮和每行调用。

public string createUrl ( $action, $model, $key, $index )
$action string

按钮名称(或操作 ID)

$model yii\db\ActiveRecordInterface

数据模型

$key 混合

与数据模型关联的键

$index integer

当前行索引

返回值 string

创建的 URL

                public function createUrl($action, $model, $key, $index)
{
    if (is_callable($this->urlCreator)) {
        return call_user_func($this->urlCreator, $action, $model, $key, $index, $this);
    }
    $params = is_array($key) ? $key : ['id' => (string) $key];
    $params[0] = $this->controller ? $this->controller . '/' . $action : $action;
    return Url::toRoute($params);
}

            
getHeaderCellLabel() 受保护方法(自 2.0.8 版本起可用)

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

返回表头单元格标签。

可以重写此方法来自定义表头单元格的标签。

protected string getHeaderCellLabel ( )
返回值 string

标签

                protected function getHeaderCellLabel()
{
    return $this->grid->emptyCell;
}

            
hasMethod() 公共方法

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

定义于: 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();
    $this->initDefaultButtons();
}

            
initDefaultButton() 受保护方法(自 2.0.11 版本起可用)

初始化单个按钮的默认按钮渲染回调函数。

受保护 void initDefaultButton ( $name, $iconName, $additionalOptions = [] )
$name string

按钮名称,如模板中所写

$iconName string

使 Bootstrap glyphicon 类唯一的组成部分

$additionalOptions array

其他选项的数组

                protected function initDefaultButton($name, $iconName, $additionalOptions = [])
{
    if (!isset($this->buttons[$name]) && strpos($this->template, '{' . $name . '}') !== false) {
        $this->buttons[$name] = function ($url, $model, $key) use ($name, $iconName, $additionalOptions) {
            switch ($name) {
                case 'view':
                    $title = Yii::t('yii', 'View');
                    break;
                case 'update':
                    $title = Yii::t('yii', 'Update');
                    break;
                case 'delete':
                    $title = Yii::t('yii', 'Delete');
                    break;
                default:
                    $title = ucfirst($name);
            }
            $options = array_merge([
                'title' => $title,
                'aria-label' => $title,
                'data-pjax' => '0',
            ], $additionalOptions, $this->buttonOptions);
            $icon = isset($this->icons[$iconName])
                ? $this->icons[$iconName]
                : Html::tag('span', '', ['class' => "glyphicon glyphicon-$iconName"]);
            return Html::a($icon, $url, $options);
        };
    }
}

            
initDefaultButtons() 受保护方法

初始化默认按钮渲染回调函数。

受保护 void initDefaultButtons ( )

                protected function initDefaultButtons()
{
    $this->initDefaultButton('view', 'eye-open');
    $this->initDefaultButton('update', 'pencil');
    $this->initDefaultButton('delete', 'trash', [
        'data-confirm' => Yii::t('yii', 'Are you sure you want to delete this item?'),
        'data-method' => 'post',
    ]);
}

            
renderDataCell() 公共方法

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

渲染数据单元格。

公共 string renderDataCell ( $model, $key, $index )
$model 混合

正在渲染的数据模型

$key 混合

与数据模型关联的键

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

渲染数据单元格内容。

受保护 string renderDataCellContent ( $model, $key, $index )
$model 混合

数据模型

$key 混合

与数据模型关联的键

$index integer

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

返回值 string

渲染结果

                protected function renderDataCellContent($model, $key, $index)
{
    return preg_replace_callback('/\\{([\w\-\/]+)\\}/', function ($matches) use ($model, $key, $index) {
        $name = $matches[1];
        if (isset($this->visibleButtons[$name])) {
            $isVisible = $this->visibleButtons[$name] instanceof \Closure
                ? call_user_func($this->visibleButtons[$name], $model, $key, $index)
                : $this->visibleButtons[$name];
        } else {
            $isVisible = true;
        }
        if ($isVisible && isset($this->buttons[$name])) {
            $url = $this->createUrl($name, $model, $key, $index);
            return call_user_func($this->buttons[$name], $url, $model, $key);
        }
        return '';
    }, $this->template);
}

            
renderFilterCell() 公共方法

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

渲染过滤器单元格。

公共 void renderFilterCell ( )

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

            
renderFilterCellContent() 受保护方法

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

渲染过滤器单元格内容。

默认实现只是渲染一个空格。可以重写此方法以自定义过滤器单元格(如果有)的渲染。

受保护 string renderFilterCellContent ( )
返回值 string

渲染结果

                protected function renderFilterCellContent()
{
    return $this->grid->emptyCell;
}

            
renderFooterCell() 公共方法

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

渲染页脚单元格。

公共 void renderFooterCell ( )

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

            
renderFooterCellContent() 受保护方法

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

渲染页脚单元格内容。

默认实现只是渲染 $footer。可以重写此方法以自定义页脚单元格的渲染。

受保护 string renderFooterCellContent ( )
返回值 string

渲染结果

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

            
renderHeaderCell() 公共方法

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

渲染表头单元格。

公共 void renderHeaderCell ( )

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

            
renderHeaderCellContent() 受保护方法

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

渲染表头单元格内容。

默认实现只是渲染 $header。可以重写此方法以自定义表头单元格的渲染。

受保护 string renderHeaderCellContent ( )
返回值 string

渲染结果

                protected function renderHeaderCellContent()
{
    return $this->header !== null && trim($this->header) !== '' ? $this->header : $this->getHeaderCellLabel();
}