【问题标题】:How do I create a CGridView with custom columns from a CArrayDataProvider?如何使用来自 CArrayDataProvider 的自定义列创建 CGridView?
【发布时间】:2013-04-23 09:24:37
【问题描述】:

我有一系列看起来像这样的模型。这些模型是基本 Yii 模型类 (BazClass) 的扩展,所以这是一个有点自定义的解决方案,但我不明白为什么它不应该工作。

$list = array
(
    0 => FooClass#1
    (
        [BazClass:_attributes] => array
        (
            'FOO_ATTRIBUTE' => '4567'
            'BAZ_ATTRIBUTE' => '1234'
            'NAME' => 'FOO BAR'
        )
        [BazClass:_related] => array()
        [_md] => null
        [CModel:_errors] => array()
        [CModel:_validators] => null
        [CModel:_scenario] => ''
        [CComponent:_e] => null
        [CComponent:_m] => null
    ),
)

我这样做是为了使它成为一个数据提供者:

$dataProvider = new CArrayDataProvider($list, array(
  'pagination'=>array(
    'pageSize'=>10,
  ),
));
$dataProvider->setData($list);

并尝试像这样在视图中渲染它。基本上我只是想显示一个名称列表,列名为“名称”。

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
      array(
        'header' => 'Name',
        'value' => $data->NAME,
      ),
    ),
));

CGridView documentation 中的示例使它看起来是可能的,但我得到的错误是:

Either "name" or "value" must be specified for CDataColumn.

好吧,我确实指定了一个值,很明显,但它似乎为空。我也尝试了$data['NAME'](因为我在某处读到CArrayDataProvider 不返回模型),但它的计算结果仍然为null。

我还检查了$dataProvider->getData() 返回的列表与我传递的列表相同。

什么给了?

【问题讨论】:

  • 你应该在你的值周围加上引号,否则它会在错误的上下文数组中被解释('header' => 'Name', 'value' => '$data->NAME', ),
  • Heureka,这行得通。你能把它作为答案吗?

标签: php yii cgridview cactivedataprovider


【解决方案1】:

你应该在你的值周围加上引号,否则它会在错误的上下文中被解释

array( 'header' => 'Name', 'value' => '$data->NAME', ),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多