yii2 show/display gridview 中的各种按钮

yii2 show/display various buttons in gridview

我对 Yii2 有疑问(和往常一样)。我试图在 GridView 的一个单元格中显示许多按钮。我有一张票有四种可能的状态:

在一列(ActionColumn?)中,我想显示许多按钮来改变它的状态,如下所示:

这是我的 GridView 中该列的代码。我只能显示一个按钮,不知道如何显示更多按钮,因为你不能 return 多个元素或一个数组:

[
               'label' => 'Change State:',
               'format' => 'raw',
               'value' => function($dataProvider){
                            if($dataProvider->state== '1'){
                               return Html::a('In Process', ['/tickets/inprocessticket', 'id' => $dataProvider->id], ['class'=>'btn btn-warning', 'id' => 'btn_inProcessTicket']);
                            }else if($dataProvider->state== '2'){
                               return Html::a('Close Ticket', ['/tickets/closeticket', 'id' => $dataProvider->id], ['class'=>'btn btn-danger', 'id' => 'btn_closeTicket']);
                            }else if($dataProvider->state== '3'){
                               return Html::a('Edit Ticket', ['/tickets/editticket', 'id' => $dataProvider->id], ['class'=>'btn btn-info', 'id' => 'btn_editTicket']);
                            }else if($dataProvider->state== '4'){
                               return Html::a('Close Ticket', ['/tickets/closeticket', 'id' => $dataProvider->id], ['class'=>'btn btn-danger', 'id' => 'btn_closeTicket']);
                            }
                          },
           ],

谢谢大家的帮助!

如果您想使用 yii\grid\ActionColumn,您应该在 $buttons 属性 中定义按钮,并使用 $visibleButtons 回调来确定应显示哪些按钮。您可以使用 $template 属性 来设置它们的顺序。

[
    'class' => \yii\grid\ActionColumn::class,
    'template' => '{process} {edit} {close}' //here will be all posible buttons
    'buttons' => [
        'process' => function($url, $model, $key) {
            return Html::a(
                'In Process',
                [
                    '/tickets/inprocessticket',
                    'id' => $model->id
                ],
                [
                    'class'=>'btn btn-warning',
                    'id' => 'btn_inProcessTicket'
                ]
            );
        },
        'edit' => function($url, $model, $key) {
            return Html::a(
                'Edit Ticket',
                [
                    '/tickets/editticket',
                    'id' => $dataProvider->id
                ], 
                [
                    'class'=>'btn btn-info',
                    'id' => 'btn_editTicket'
                ]
            );
        },
        'close' => function ($url, $model, $key) {
            return Html::a(
                'Close Ticket',
                [
                    '/tickets/closeticket',
                    'id' => $dataProvider->id
                ],
                [
                    'class'=>'btn btn-danger',
                    'id' => 'btn_closeTicket'
                ]
            );
        },
    ],
    'visibleButtons' => [
        'process' => function($model, $key, $index) {
              //the in process button should only be shown if state == 1
              return $model->state == 1;
        },
        'edit' => function($model, $key, $index) {
              //the edit button should only be shown if state == 3
              return $model->state == 3;
        },
        'close' => function($model, $key, $index) {
              //the close button should be shown in each state except of state == 3
              return $model->state != 3;
        },
    ],
]

您可以找到有关 ActionColumn 及其回调 in documentation 的更多信息。