Aquí, estoy generando columna dinámica en yii2 GridView

$gridColumns = [];
$gridColumns[] = [
    'class' => 'yii\grid\SerialColumn',
    'contentOptions' => ['width' => 10],
];

foreach ($CategoryList as $categoryId => $categoryName) {
    $gridColumns[] = [
        'label' => $categoryName,
        'value' => function($model) {
            return $categoryId;    <---- categoryId use in function
        }
    ];
}


GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => $gridColumns,
]);

¿Cómo puedo usar categorId en la función gridView Closure?

Cada columna tiene $ categoryId único como 1,2,3 según el bucle

0
Shringiraj Dewangan 1 ene. 2020 a las 10:35

2 respuestas

La mejor respuesta
foreach ($CategoryList as $categoryId => $categoryName) {

    $categoryIdVariable = "$categoryId"; <---- store value in a variable
    $$categoryIdVariable = $categoryIdVariable; <---- store variable in another variable


    $gridColumns[] = [
        'label' => $categoryName,
        'value' => function($model) use($categoryIdVariable) { <---- and use it like a string variable

            $categoryId = $categoryIdVariable;
            return $categoryId;    <---- dynamic categoryId use in function
        }
    ];
}
0
Shringiraj Dewangan 4 ene. 2020 a las 13:08

Usar la función anónima use ()

$gridColumns[] = [
    'label' => $categoryName,
    'value' => function($model) use ($categoryId) {
        return $categoryId;
    }
];
0
Insane Skull 1 ene. 2020 a las 08:10