在视图中,控制器名称可以通过 $ 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;
答案 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;
答案 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
扩展,只要它们不改变它们扩展的对象的内置行为,上面应该可以正常工作。