2013-04-21 80 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

相關問題