在CGridView和CButtonColumn问题

时间:2014-04-16 18:30:48

标签: php yii

我在CGridView中有以下数组:

array(
    'header' => Yii::t('dataTable', 'Actions'),
    'class' => 'CButtonColumn',
    'template' => '{action}',
    'buttons' => array(
        'action' => array(
            'label' => '$data["action"]["action"]',
            'url' => function($data) use($paramsURI) {
                $paramsURI['action'] = $data['action']['action'];
                $paramsURI['id'] = $data['id'];
                return Yii::app()->createUrl(
                     "admin/report/transactions", $paramsURI
                );
            }
        )
    )
)

我需要在按钮标签上使用$data,但在'label' => '$data["action"]["action"]'中,$data未定义,所以我尝试在'action'中使用闭包,但错误是'htmlspecialchars() expects parameter 1 to be string, object given '

任何ideia如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

不要使用CButtonColumn,使用'type'=>'raw'创建简单列,并在此字段中显示您想要的任何内容。

答案 1 :(得分:2)

我认为标签不支持eval表达式。您可以使用visible选项来隐藏和显示这样的数据敏感标签。在下面的案例"行动1"如果$ data [' action'] [' action'] ==" Action 1"和行动2适当。观察'模板'并且'可见'钥匙在这里。

array(
    'header' => Yii::t('dataTable', 'Actions'),
    'class' => 'CButtonColumn',
    'template' => '{action1 action2}',
    'buttons' => array(
        'action1' => array(
            'label' => 'Action 1',
            'visible' => '$data["action"]["action"]=="Action 1"',
            'url' => function($data) use($paramsURI) {
                $paramsURI['action'] = $data['action']['action'];
                $paramsURI['id'] = $data['id'];
                return Yii::app()->createUrl(
                     "admin/report/transactions", $paramsURI
                );
            }
        ),
        'action2' => array(
            'label' => 'Action 2',
            'visible' => '$data["action"]["action"]=="Action 2"',
            'url' => function($data) use($paramsURI) {
                $paramsURI['action'] = $data['action']['action'];
                $paramsURI['id'] = $data['id'];
                return Yii::app()->createUrl(
                     "admin/report/transactions", $paramsURI
                );
            }
        )
    )