如何在YII中使用CGridView绑定数组时访问属性


How to access a property while binding an array with CGridView in YII

我有一个网格,需要在其中绑定月份列表。我已经创建了一个月份列表,并将其绑定到列表中,如下所示。

$items = $this->getMonths();
         $dataProvider= new CArrayDataProvider(array(),array('keyField'=>false));   
         $dataProvider->setData($items);
$this->render('monthlyReports',
               array('model'=>$this->loadModel($_POST['Users']['user_id']),
              'dataProvider'=>$dataProvider,));

到目前为止,一切都很顺利。现在在视图文件中,我有以下代码

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'users-grid',
'dataProvider'=>$dataProvider,
'columns'=>array(
    'Months',
    array(
    'name'=>'Months',
    'value'=>'$data->Months'),
)));

现在的问题是,我无法在视图文件中以$data->Months的形式访问Months,就好像我可以直接访问Months一样。我如何以$data->Months

Array
(
[0] => Array
    (
        [Months] => January
    )
[1] => Array
    (
        [Months] => February
    )
[2] => Array
    (
        [Months] => March
    )
[3] => Array
    (
        [Months] => April
    )
[4] => Array
    (
        [Months] => May
    )
[5] => Array
    (
        [Months] => June
    )
)

您正在传递数组数据,因此需要以'$data["Months"]'的身份访问数据。

有很多方法可以做到这一点。例如:

控制器:

$monthList = $this->getMonths();
$this->render('monthlyReports',
               array('model'=>$this->loadModel($_POST['Users']['user_id']),
               'monthList'=>$monthList, // Pass the month list to the view
              'dataProvider'=>$dataProvider,));

视图:

array(
    'name'=>'Months',
    'value'=>function ($data, $row) use ($monthList){ return $data->Month? $monthList[$data->Month]['Months'] : '' ; }, // $data->Month it's the model attribute with the month value.
),