Как передать массив в качестве параметра для столбца 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;
                            },
                        ],