Как передать массив в качестве параметра для столбца gridview Yii2
Я пытаюсь передать $arr_judete_v2
как параметр функции обратного вызова в gridview, и она не работает;
$model['county_id']
возвращает число
$arr_judete_v2[1]['nume']
возвращает имя
мой вопрос:
[
'attribute' => 'county_id',
'label' => Yii::t('diverse', 'Judet'),
'content' => function($model, $arr_judete_v2) {
return $arr_judete_v2[$model['county_id']]['nume'];
},
],
весь gridview
<?php
echo GridView::widget([
'layout' => "{items}",
'dataProvider' => $dataProvider,
'columns' => [
'id',
[
'attribute' => 'nume',
'label' => Yii::t('companie', 'nume'),
],
'cui',
'email',
[
'attribute' => 'county_id',
'label' => Yii::t('diverse', 'Judet'),
'content' => function($model, $arr_judete_v2) {
return $arr_judete_v2[$model['county_id']]['nume'];
},
],
[
'class' => 'yiigridActionColumn',
'template' => '{update} {delete}',
'buttons' => [
'update' => function ($url, $model) {
return Html::a('<span class="glyphicon glyphicon-pencil"></span>', ['update', 'id' => $model['id']], [
'title' => Yii::t('yii', 'Update'),
'data-pjax' => '0',
]);
}
]
],
],
]);
2 ответов
С исходный код для \Yii\grid\Column
@var вызываемый это вызываемый, который будет использоваться для создания содержимого каждой ячейки. Сигнатура функции должна быть следующей:
function ($model, $key, $index, $column)
As Михай правильно указал можно использовать use()
включить переменные в область действия функции следующим образом:
"content" => function($model, $key, $index, $column) use ($arr_judete_v2) {
return $arr_judete_v2[$model['county_id']]['nume'];
}
обратите внимание, что переменные копируются в функция и как таковые любые изменения не повлияют на переменную вне функции. Лучшее объяснение этому дано в ответ.
Use use (), см. раздел определение функции для значения столбца.
$invoice_status_data = array('' => 'Select a status') + ArrayHelper::map(InvoiceStatus::find()->asArray()->all(), 'id', 'name');
........................
'columns' => [
........................
[
'attribute'=>'Contact.name',
'format'=>'raw',
'value'=>function ($model, $key, $index, $widget) use ($invoice_status_data) {
.............................
$content .=
Html::dropDownList('dropdown'. $model->id, '', $invoice_status_data, [
'class' => 'form-control',
'onchange' => 'javascript: myInvoice.change($(this));',
'data-href' => Url::toRoute(['invoice/change-status', "Invoice_id"=>$model->id])]);
return $content;
},
],