如何在CGridView中获取控制器名称?

时间:2013-04-21 10:59:45

标签: php gridview yii

在视图中,控制器名称可以通过 $ this-> id 来实现,但在CGridView $ this-> id评估中会产生另一个名称(可能是gridview小部件名称)。 (1)如何在cgridview中获取控制器名称?

  

此外,我尝试在调用CGridview之前定义变量($ thisCtl = $ this-> id)。虽然$ thisCtl具有控制器名称,但在CGridview评估过程中它没有定义。 (2)有没有办法将参数传递给CGridView?

<?php 
$thisCtl = $this->id;
$data = $model->search(); 
$this->widget('bootstrap.widgets.TbExtendedGridView', array(
    'id'=>'insurance-grid',
    'dataProvider'=>$model->search(),
    //'filter'=>$model,
    'columns'=>array(
        'id',
        'registeration_date',
        'modification_date',
        array(
            'htmlOptions' => array('nowrap'=>'nowrap'), 
            'class'=>'bootstrap.widgets.TbButtonColumn', 
            'viewButtonUrl'=>'Yii::app()->createUrl("$thisCtl/view", array("id"=>$data["id"]))', 
            'updateButtonUrl'=>'Yii::app()->createUrl("$this->id/update", array("id"=>$data["id"]))', 
        ),
    ),
)); 

&GT;

2 个答案:

答案 0 :(得分:1)

问题是CGridView中的$ this引用了它的小部件。所以我们应该使用全局函数来获取当前控制器名称:

  

的Yii ::应用程序() - &GT; getController() - &GT;的getId();

代码应如下所示:

<?php 
$thisCtl = $this->id;
$data = $model->search(); 
$this->widget('bootstrap.widgets.TbExtendedGridView', array(
    'id'=>'insurance-grid',
    'dataProvider'=>$model->search(),
    //'filter'=>$model,
    'columns'=>array(
        'id',
        'registeration_date',
        'modification_date',
        array(
            'htmlOptions' => array('nowrap'=>'nowrap'), 
            'class'=>'bootstrap.widgets.TbButtonColumn', 
            'viewButtonUrl'=>'Yii::app()->createUrl("'.Yii::app()->getController()->getId().'/view", array("id"=>$data["id"]))', 
            'updateButtonUrl'=>'Yii::app()->createUrl("'.Yii::app()->getController()->getId().'/update", array("id"=>$data["id"]))', 
        ),
    ),
)); 

&GT;

感谢此帖Getting Current Controller ID in Yii

答案 1 :(得分:1)

由于您希望在列值中使用控制器值,因此您可以执行以下操作来获取控制器名称:

$this->grid->controller->id

当您在TbButtonColumn范围内时,您可以访问grid属性(因为TbButtonColumn从CButtonColumn延伸,而CGridColumn又从TbExtendsGridView延伸)以访问CGridView 3}}(最终从controller延伸),您可以在其中访问网格的id属性(由小部件父级定义),最后获取{{3}}的控制器。

然后,假设您的所有其他代码都是正确的,您可以像这样指定gridview:

<?php 
$data = $model->search(); 
$this->widget('bootstrap.widgets.TbExtendedGridView', array(
    'id'=>'insurance-grid',
    'dataProvider'=>$model->search(),
    //'filter'=>$model,
    'columns'=>array(
        'id',
        'registeration_date',
        'modification_date',
        array(
            'htmlOptions' => array('nowrap'=>'nowrap'), 
            'class'=>'bootstrap.widgets.TbButtonColumn', 
            'viewButtonUrl'=>'Yii::app()->createUrl($this->grid->controller->id."/view", array("id"=>$data["id"]))', 
            'updateButtonUrl'=>'Yii::app()->createUrl($this->grid->controller->id."/update", array("id"=>$data["id"]))', 
        ),
    ),
));

我自己没有使用任何Tb扩展,只要它们不改变它们扩展的对象的内置行为,上面应该可以正常工作。