2013-01-24 88 views
0

我試圖在TbButtonColumn上使用$data->id,但我收到錯誤"Trying to get property of non-object"TbGridView工作正常! 我做錯了什麼?

View.php:

<?php $this->widget('bootstrap.widgets.TbGridView',array(
    'type'=>'striped bordered condensed', 
    'id'=>'profiles-grid', 
    'dataProvider'=>$dataProvider, 
    'columns'=>array(
     'id', 
     array(
      'class'=>'bootstrap.widgets.TbButtonColumn', 
      'template'=>'{create}', 
      'buttons'=>array 
      (
       'create' => array(
        'label'=>'Criar Evento', 
        'icon'=>'plus', 
        'url'=>'Yii::app()->controller->createUrl("events/create", array("id"=>$data->id))', // Problem here on $data->id 
       ), 
      ), 
     ), 
    ), 
)); ?> 
+0

什麼樣的數據提供者是'$ dataProvider'?如果它不包含模型'$ data-> id'將不起作用。 – topher

+0

@topher它有'id'column,'TbGridView'沒有'url'正常工作。它來自'CSqlDataProvider',我認爲是這個問題。 –

+0

發現問題。 'CSqlDataProvider'需要使用''id「=> $ data [」profile_id「]'而不是'$ data-> id'。感謝大家;) –

回答

2

設置按鈕的url就像這樣對我有效:

'url'=>'$this->grid->controller->createUrl("update", array(
      "id"=>$data->primaryKey))', 
1

你得到錯誤的事實,$data不是一個對象而引起的。您不能在任何其他變量類型上使用屬性訪問運算符->

從您的問題中不清楚$data分配了一個值,或者該值應該是什麼值。您可以確保一個變量包含對象使用is_object功能:

if (!is_object($data)) 
    die('There seems to be a problem with the data'); 

這會告訴你,$data不是對象,從而防止錯誤。但是,我懷疑潛在的問題是你期望填充變量的機制失敗,或者沒有按照你期望的方式工作。

您可以使用var_dump調試變量,並檢查它們的類型在這個過程中:

var_dump($data);

...這會給你一個什麼樣$data實際上是一個更好的主意 - 它不是一個對象,這是肯定的!

文檔

相關問題