Php 在Yii中呈现CGridView中的小部件

Php 在Yii中呈现CGridView中的小部件,php,yii,widget,Php,Yii,Widget,我正在使用Yii框架,我遇到了一个问题。我在扩展文件夹中创建了一个小部件,并试图在CGridView中呈现我的小部件。部分代码(我的网格)如下所示: 'columns'=>array( 'id', 'name', array( 'type' => 'raw', 'value' => $this->widget('application.extensions.jalali.gregorian2jalali',array()) ), 它在运行时给我以下错

我正在使用Yii框架,我遇到了一个问题。我在扩展文件夹中创建了一个小部件,并试图在CGridView中呈现我的小部件。部分代码(我的网格)如下所示:

'columns'=>array(
'id',
'name',
array(
    'type'  => 'raw',
    'value' =>  $this->widget('application.extensions.jalali.gregorian2jalali',array())
),
它在运行时给我以下错误:

Error 500
call_user_func_array() expects parameter 1 to be a valid callback, no array or string given

问题出在哪里

将列指定为数组时,它将用于创建网格列实例,其中“class”元素指定列类名称(如果不存在,则默认为CDATA列)。目前,提供了以下官方列类:CDATA列、CLinkColumn、CButtonColumn和CCheckBoxColumn

and value in:将使用evaluateExpression对每个数据单元求值的PHP表达式,其结果将作为数据单元的内容呈现。在此表达式中,可以使用以下变量: $row行数(从零开始)。 $data行的数据模型。 $this是列对象。 PHP表达式可以是任何具有值的PHP代码。要了解有关表达式的更多信息,请参阅


只是复制粘贴它

将列指定为数组时,它将用于创建网格列实例,其中“class”元素指定列类名称(如果不存在,则默认为CDATA列)。目前,提供了以下官方列类:CDATA列、CLinkColumn、CButtonColumn和CCheckBoxColumn

and value in:将使用evaluateExpression对每个数据单元求值的PHP表达式,其结果将作为数据单元的内容呈现。在此表达式中,可以使用以下变量: $row行数(从零开始)。 $data行的数据模型。 $this是列对象。 PHP表达式可以是任何具有值的PHP代码。要了解有关表达式的更多信息,请参阅


只是复制粘贴它

值指定不正确,它必须是如下所示的字符串:

'value' =>  '$this->grid->controller
     ->widget("ext.jalali.gregorian2jalali",array(),true)'

值指定不正确,它必须是如下所示的字符串:

'value' =>  '$this->grid->controller
     ->widget("ext.jalali.gregorian2jalali",array(),true)'

和中的可选渲染小部件 尝试将小部件推入如下函数

e、 g:在Post模型(Post.php文件)中,创建一个名为
gregorian2jalali()的新函数

然后在视图中:

'columns'=>array(
'id',
'name',
array(
    'type'  => 'raw',
    'value' =>  "Post::gregorian2jalali()"
),

和中的可选渲染小部件 尝试将小部件推入如下函数

e、 g:在Post模型(Post.php文件)中,创建一个名为
gregorian2jalali()的新函数

然后在视图中:

'columns'=>array(
'id',
'name',
array(
    'type'  => 'raw',
    'value' =>  "Post::gregorian2jalali()"
),

我也在想同样的问题,并发现了以下适合我的作品:

    <?php $this->widget('bootstrap.widgets.TbGridView',array(
         'type'=>'striped bordered condensed',
         'id'=>'jugada-grid',
         'dataProvider'=>$model->search(),
         'filter'=>$model,
         'columns'=>array(
            'id',
            'nombre',
            'descripcion',
            array(
                    'name'  => 'animacion',
                    'header'=> 'Animación',
                    'type' => 'raw',
                    'value'=> "Yii::app()->controller->widget('bootstrap.widgets.TbButton', array(
                    'label'=>'Campo',
                    'type'=>'primary',
                    'htmlOptions'=>array(
                        'id' => 'activate-field',
                        'data-toggle'=>'modal',
                        'data-target'=>'#field-popup',
                    ),
                ),true)",
            ),
            array(
                'class'=>'bootstrap.widgets.TbButtonColumn',
            ),
    ),
)); ?>

我也在想同样的问题,并发现了以下适合我的作品:

    <?php $this->widget('bootstrap.widgets.TbGridView',array(
         'type'=>'striped bordered condensed',
         'id'=>'jugada-grid',
         'dataProvider'=>$model->search(),
         'filter'=>$model,
         'columns'=>array(
            'id',
            'nombre',
            'descripcion',
            array(
                    'name'  => 'animacion',
                    'header'=> 'Animación',
                    'type' => 'raw',
                    'value'=> "Yii::app()->controller->widget('bootstrap.widgets.TbButton', array(
                    'label'=>'Campo',
                    'type'=>'primary',
                    'htmlOptions'=>array(
                        'id' => 'activate-field',
                        'data-toggle'=>'modal',
                        'data-target'=>'#field-popup',
                    ),
                ),true)",
            ),
            array(
                'class'=>'bootstrap.widgets.TbButtonColumn',
            ),
    ),
)); ?>

无法从模型访问小部件的可能副本的可能副本。你的意思是我必须在模型文件夹中创建文件吗?该小部件无法从模型访问。你的意思是我必须在model文件夹中创建文件吗?尝试用
$this->grid->controller
替换
$this
,并向小部件添加第三个参数
true
。请参见上面的编辑。此外,访问扩展库的默认点符号是
ext.
而不是
application.extensions.
。忽略最后一条注释,我使用
ext.
别名作为扩展名<代码>应用程序.扩展。
有效,我测试它是因为我对自己有点不确定。尝试用
$this->grid->controller
替换
$this
,并向小部件添加第三个参数
true
。请参见上面的编辑。此外,访问扩展库的默认点符号是
ext.
而不是
application.extensions.
。忽略最后一条注释,我使用
ext.
别名作为扩展名<代码>应用程序.扩展。
有效,我测试了它,因为我对自己有点不确定。