2013-04-21 78 views
0

在视图控制器名称可以通过$ this-> id来实现,但是在CGridView $ this-> id评估结果中有另一个名字(可能是gridview的widget名称)。 (1)如何在cgridview中获取控制器名称?
如何获取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"]))', 
     ), 
    ), 
)); 

?>

+0

你试过吗'Yii :: app() - > id' – GBD 2013-04-21 11:02:27

+0

我试过了,它有一个奇怪的值! – HPM 2013-04-21 11:04:20

+0

你试过这个Yii :: app() - > createUrl(“'。$ this-> id。'/ update”,array(“id”=> $ data [“id”]))' – GBD 2013-04-21 11:06:27

回答

1

因为它似乎要列值内使用控制器的值,您可以执行以下操作获取控制器名称:

$this->grid->controller->id 

作为你是TbButtonColumn内,就可以访问grid属性(因为TbButtonColumn从CButtonColumn这反过来从CGridColumn延伸延伸)访问TbExtendsGridView(其最终从CGridView延伸),您反过来访问的所述controller属性网格(由小部件父项定义),最后得到控制器的id

然后,假设所有其他代码是正确的,你会指定你的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扩展自己,通过只要他们不改变建立在它们扩展的对象的行为上面,上面应该按需要工作。

+0

我试过你的解决方案:可恢复的错误 类TbExtendedGridView的对象无法转换为字符串 – HPM 2013-04-21 15:44:50

+0

嗯,这可能是与eval'd双引号内的对象链接的问题。使用'eval()'有时候会非常棘手。看看它是否适用于我刚刚编辑的内容。 – 2013-04-21 16:18:31

+0

没关系,1-你的答案是什么? 2-我更喜欢你的答案,因为它是从gridView获取控制器名称的正确方式,而我的答案是一种补救措施! – HPM 2013-04-21 18:06:23

1

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

Yii :: app() - > getController() - > 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"]))', 
     ), 
    ), 
)); 

>

多亏了这个帖子Getting Current Controller ID in Yii

相关问题