如何在gridview yii2高级模板中控制模板?

时间:2016-02-05 21:56:55

标签: php yii2

我想在template attribute中给出if条件来控制动作按钮(查看,编辑和删除),并添加新按钮。 我有这个代码,但有些不对劲:

[
    'class' => 'yii\grid\ActionColumn',
    'template'=>function ($session){
        if($session->get('userType') != 'admin'){
            '{view}{update}{delete}';
        }else{

            'template' => '{view}{update}{delete}{activate}{deactivate}',
            'buttons' => [
                'deactivate' => function ($url,\backend\models\Document $model) {
                    if($model->Status==1)
                        return Html::a('<span class="glyphicon  glyphicon glyphicon-remove"></span>', $url, [
                            'title' => Yii::t('app', 'deactivate'),
                        ]);
                    },
                'activate' => function ($url, $model) {
                    if($model->Status==0)
                        return Html::a('<span class="glyphicon glyphicon glyphicon-ok"></span>', $url, [
                            'title' => Yii::t('app', 'activate'),
                        ]);
                    },
                ],
            }
        },
    ],

但我收到了这个错误:

Object of class Closure could not be converted to string

我正在使用会话对象作为函数中的参数。 如何解决这个问题,或者检查条件的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

不要使用匿名功能

 'template'=>function ( ... ) {}

但是可以通过代码调用外部函数或直接使用适当的分配,例如:

'template'=> (if($session->get('userType') != 'admin')) ? '{view}{update}{delete}' : '{view}{update}{delete}{activate}{deactivate}',


public function myTemplate($session){
   ....
   return yourResult;

}

然后

'template'=> myTemplate($session),