Php 如何知道yii2 Gridview上的列名
在我的系统上,用户可以用他们想要的名称创建列,所以我将列名保存到数据库中 我在列选项上使用此代码:Php 如何知道yii2 Gridview上的列名,php,gridview,yii2,Php,Gridview,Yii2,在我的系统上,用户可以用他们想要的名称创建列,所以我将列名保存到数据库中 我在列选项上使用此代码: foreach((new Field)->listFields as $item){ data = [ 'attribute' => $item->name, 'value' => function($model){ return $model->$item->name; // the problem is here, $i
foreach((new Field)->listFields as $item){
data = [
'attribute' => $item->name,
'value' => function($model){
return $model->$item->name; // the problem is here, $item->name is out of the scope
},
];
array_push($columns, $data);
}
return $this->render('index', [
'model' => $model,
'dataProvider' => $dataProvider,
'columns' => $columns,
]);
这是我的索引视图:
<?= \yii\grid\GridView::widget([
'dataProvider' => $dataProvider,
'formatter' => ['class' => 'yii\i18n\Formatter'],
'columns' => $columns,
]); ?>
listField的返回只是一个数组:
Array
(
[0] => stdClass Object
(
[name] => ITEM_1
[type] => txt
)
[1] => stdClass Object
(
[name] => IMAGE_1
[id] => img
)
[2] => stdClass Object
(
[name] => IMAGE_2
[id] => img
)
)
并且dataProvider中sql的返回是
Array
(
[0] => Array
(
[ITEM_1] => Item 1 blablabla
[IMAGE_1] => http://url.jpg
[IMAGE_2] => http://url2.jpg
[id] => 1
)
)
因为我使用的是动态列,所以我不能像$mode->IMAGE_1那样硬编码列名,因为您可以使用dinamic变量名访问该值
return $model->{$item->name};
或者使用数组访问
'value' => function($data){
return $data[{$item->name}] ;
},
可以使用dinamic变量名访问该值
return $model->{$item->name};
或者使用数组访问
'value' => function($data){
return $data[{$item->name}] ;
},
正如您所说,
$item
超出了范围,正如php文档中所说的(并非特定于yii):
闭包也可以从父范围继承变量。任何此类变量都必须传递给use
语言结构
您只需添加使用($item)
:
PS:这个问题应该结束,因为它是一个重复的,正如你所说,
$item
超出了范围,正如php文档中所说的(不特定于yii):
闭包也可以从父范围继承变量。任何此类变量都必须传递给use
语言结构
您只需添加使用($item)
:
PS:这个问题应该结束,因为它是重复的请显示您的模型(字段)和所有操作代码为什么在$this->render中有$model?要像表单一样传递此gridview中未使用的其他变量,请显示您的模型(字段)还有所有的动作代码为什么在$this->render中有$model?来传递这个gridview中没有使用的其他变量,就像表单一样。你说得对,谢谢!你说得对,谢谢!