Php 在CGridView和CButtonColumn问题中

Php 在CGridView和CButtonColumn问题中,php,yii,Php,Yii,我在CGridView中有以下数组: array( 'header' => Yii::t('dataTable', 'Actions'), 'class' => 'CButtonColumn', 'template' => '{action}', 'buttons' => array( 'action' => array( 'label' => '$data["action"]["acti

我在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()期望参数1是字符串,给定的对象“


有没有办法解决这个问题

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

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

我认为标签不支持eval表达式。您可以使用visible选项来隐藏和显示像这样的数据敏感标签。在以下情况下,如果$data['Action']['Action']==“Action 1”和Action 2正确,则显示“Action 1”。注意此处的“模板”和“可见”键

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
                );
            }
        )
    )

)我认为标签不支持eval表达式。您可以使用visible选项来隐藏和显示像这样的数据敏感标签。在以下情况下,如果$data['Action']['Action']==“Action 1”和Action 2正确,则显示“Action 1”。注意此处的“模板”和“可见”键

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
                );
            }
        )
    )

)

nazim这是一个很好的方法,但结果不是预期的,您可以在此处看到:@Maykonn您需要确保模板“action1”和“action2”中的键与“buttons”数组中的键匹配。您可能希望尝试使用静态url。我不熟悉您用来生成URL的方法。我会使用类似“url”=>“Yii::app()->createUrl”(“管理/报告/事务”,数组(“操作”=>$data[“操作”][“操作”],“id”=>$data[“id”]))之类的东西。我使用闭包是因为
Yii::app()->createUrl()
在eval()上给出了一个错误,其中一些与url中的和相关。当我从行中单击按钮时,我需要从请求URI获取参数。$paramsURI是一个parse_url($_SERVER['REQUEST_URI']),在url的每个项目中都是一个分解。只是工作。谢谢很公平。但我不认为$data会在报价之外得到评估。以函数($data)开头的url值不在引号中。只是一种预感:)是的,但就在通过param传递给closure
函数($data)
时。nazim这是一种很好的方法,但结果不是预期的,您可以在这里看到:@Maykonn您需要确保模板“action1”和“action2”中的键与“buttons”数组中的键匹配。您可能希望尝试使用静态url。我不熟悉您用来生成URL的方法。我会使用类似“url”=>“Yii::app()->createUrl”(“管理/报告/事务”,数组(“操作”=>$data[“操作”][“操作”],“id”=>$data[“id”]))之类的东西。我使用闭包是因为
Yii::app()->createUrl()
在eval()上给出了一个错误,其中一些与url中的和相关。当我从行中单击按钮时,我需要从请求URI获取参数。$paramsURI是一个parse_url($_SERVER['REQUEST_URI']),在url的每个项目中都是一个分解。只是工作。谢谢很公平。但我不认为$data会在报价之外得到评估。以函数($data)开头的url值不在引号中。只是一种预感:)是的,但就在通过param传递给closure
函数($data)
时。在我的例子中,这是有效的。但是如果有人需要使用按钮功能,更好的方法是采用nazim方法。如果您有10个不同的标签,您不想创建10个按钮,是吗?:)亚历克斯:这是我的工作。但是如果有人需要使用按钮功能,更好的方法是采用nazim方法。如果您有10个不同的标签,您不想创建10个按钮,是吗?:)