Yii 1.3 zii.widgets.grid.CGridView向类

时间:2015-07-06 09:32:35

标签: php yii

我在我的一个控制器中有与数据库一起工作的功能。 像这样:

static function getCamByClassId($id)
{
    $connection=Yii::app()->db;
    $command=$connection->createCommand("some query");
    $camReader=$command->query();
    $camList=$command->queryAll();
    return $camList;
}

我也在使用zii小部件。像这样:

    $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'someId',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        array(
            'name' => 'Image',
            'type' => 'raw',
            'value' => 'CHtml::image("/uploads/thumb_".$data->Lesson_ID."_".$data->Image, "" ,array(\'width\'=>195, \'height\'=>110))', 
        ,
        ),  
...
),));

现在我需要在那里使用其他图片,我得到了这个方法的帮助。 我试图替换

上的'value'属性
'value' => 'CHtml::image(".$this->getCamByClassId($data->Lesson_ID)[0][\'Cam1\'].", "default image" ,array(\'width\'=>195, \'height\'=>110))',

然后我收到了这个例外:

Property "CDataColumn.getCamByClassId" is not defined.

我认为将方法复制到CDataColumn.php是没有意义的,因为它查找属性,我无法将方法返回值设置为此calss的某些属性,因为它的结果取决于{ {1}}参数。如何让我传递给价值' getCamByClassId的属性结果?
更新 好的,我可以像$id一样使用它,但我怎样才能通过LessonController::getCamByClassId呢? 的 UPDATE1 试过这个

$data->LessonId

它说:类CGridView的对象无法转换为字符串 的 UPDATE2 查看了topher的最后一个建议

'value' => 'CHtml::image(".$this->grid->controller->getCamByClassId($data->Lesson_ID).", "default image" ,array(\'width\'=>195, \'height\'=>110))',

我的错误:我有一个错字。现在它说0是未定义的偏移量,将调试它。

2 个答案:

答案 0 :(得分:2)

value中的

cv::VideoCapture cap(videoFileName); if(!cap.isOpened()) // check if we succeeded return; while (cap.isOpened()) { cv::Mat frame; cap >> frame; cv::flip(frame, frame, -1); cv::flip(frame, frame, 1); // get RGB channels w = frame.cols; h = frame.rows; int size = w * h * sizeof(unsigned char); unsigned char * r = (unsigned char*) malloc(size); unsigned char * g = (unsigned char*) malloc(size); unsigned char * b = (unsigned char*) malloc(size); for(int y = 0; y < h;y++) { for(int x = 0; x < w; x++) { // get pixel cv::Vec3b color = frame.at<cv::Vec3b>(cv::Point(x,y)); r[y * w + x] = color[2]; g[y * w + x] = color[1]; b[y * w + x] = color[0]; } } } cap.release(); 指的是CDataColumn实例,而不是您的控制器。由于您的方法是静态的并且假设您的控制器是自动加载的,您可以使用以下方法调用该方法:

$this

如果没有,您可以通过myController::getCamByClassId(...) 的{​​{3}}属性访问该属性,该属性会依次返回grid属性的CGridView object

CDataColumn

为了便于阅读和维护,您可以使用匿名函数:

$this->grid->controller->getCamByClassId(...)

答案 1 :(得分:0)

您使用$ this-&gt; getCamByClassId但它被定义为静态。因此要么删除静态属性,要么使用self :: getCamByClassId。

如果有效,请告知我们

标记