我在我的一个控制器中有与数据库一起工作的功能。 像这样:
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是未定义的偏移量,将调试它。
答案 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。
如果有效,请告知我们
标记