Yii引导网格:试图获取非对象的属性

时间:2012-04-23 22:28:02

标签: yii twitter-bootstrap

此:

$gridDataProvider = new CArrayDataProvider(array(
    array('id'=>1, 'firstName'=>'Mark', 'lastName'=>'Otto', 'language'=>'CSS'),
    array('id'=>2, 'firstName'=>'Jacob', 'lastName'=>'Thornton', 'language'=>'JavaScript'),
    array('id'=>3, 'firstName'=>'Stu', 'lastName'=>'Dent', 'language'=>'HTML'),
));


 $this->widget('bootstrap.widgets.BootGridView', array(
    'type'=>'striped bordered condensed',
    'dataProvider'=>$gridDataProvider,
    'template'=>"{items}",
    'columns'=>array(
        array('name'=>'id', 'header'=>'#'),
        array('name'=>'firstName', 'header'=>'First name'),
        array('name'=>'lastName', 'header'=>'Last name'),
        array('name'=>'language', 'header'=>'Language'),
        array(
            'class'=>'bootstrap.widgets.BootButtonColumn',
            'htmlOptions'=>array('style'=>'width: 50px'),
        ),
    ),
));

正在回归:

试图获取非对象的属性

菜单,按钮(以及其他所有内容)工作正常。

3 个答案:

答案 0 :(得分:1)

这很简单,因为该示例使用CArrayDataProvider来填充网格。 当您进入BootButton(生成此列的类)以查看运行它的内容时,您将看到它正在尝试从dataprovider获取primaryKey属性,但没有这样的属性,因为数据是数组类型。

如果您计划使用按钮,则必须为网格传递CActiveDataProvider。

所以试着这样使用:

$this->widget('bootstrap.widgets.BootGridView', array(
        'type'=>'striped bordered condensed',
        'dataProvider'=>$model->search(),
        'template'=>"{items}{pager}",
        'filter'=>$model,...

$ model是控制器传递给视图的CActiveRecord。

答案 1 :(得分:0)

我不知道你在这个类中得到的代码是什么 - bootstrap.widgets.BootButtonColumn 但不管它是什么,这都是造成这个问题的原因。 确保您已定义每个按钮的完整操作,以避免此问题。

我的意思是,对于按钮列中的每个按钮,将URL设置为 -

'$this->grid->controller->createUrl("action_name", array("param_name" => "param_value"))'

这应该可以解决问题。

答案 2 :(得分:0)

这是由Button Column缺少变量引起的 它应该是

array(
        'class'=>'bootstrap.widgets.BootButtonColumn',
        'htmlOptions'=>array('style'=>'width: 50px'),
                            'viewButtonUrl'=>null,
                            'updateButtonUrl'=>null,
                            'deleteButtonUrl'=>null,
    ),

// reposted from here