Я пытаюсь получить доступ к переменной в файле представления в Gridview
но это ошибка it should be array but null given
я заявляю $totalDays
поверх моего файла просмотра, и я использую его в Gridview
как ниже
[
'attribute' => 'class_id',
'format' => 'raw',
'label' => "Class Date",
'value' => function ($model) {
array_push($totalDays,$model->class->date);
return $model->class->date;
},
'footer'=> '<span>Total Days</span>',
],
Но выкидывает следующую ошибку
array_push () ожидает, что параметр 1 будет массивом
Объяснить, $totalDays
недоступен в виджете, потому что вся функция запускается только при визуализации виджета, $totalDays
больше не объявляется. Как намекнул @arogachev выше, вам нужно будет сделать $totalDays
в вашей модели, то вы можете получить к нему доступ. Попробуйте это в вашей модели;
public function getTotalDays(){
//Your logic here to generate totalDays
return $totalDays;
}
Тогда вы можете использовать это по вашему мнению, как это;
[
'attribute' => 'class_id',
'format' => 'raw',
'label' => "Class Date",
'value' => function ($model) {
array_push($model->totalDays, totalDays,$model->class->date);
return $model->class->date;
},
'footer'=> '<span>Total Days</span>',
],
Вставить use
после подписи функции в value
вызываемая функция:
[
'attribute' => 'class_id',
'format' => 'raw',
'label' => "Class Date",
'value' => function ($model) use($totaleDays) {
array_push($totalDays,$model->class->date);
return $model->class->date;
},
'footer'=> '<span>Total Days</span>',
],
Хотя вы можете определенно передать эту переменную через use
раздел закрытия, это неправильно в вашем коде. Принцип MVC нарушается, потому что просмотр это только для отображения, и вы выставляете логику, такую как array_push
,
Я бы порекомендовал провести его рефакторинг и поместить расчет данных в модель, чтобы вы могли просто позвонить return $model->yourMethod();
и он вернет нужные данные.
Как @Fabrizio сказал. Вставить use
после подписи функции в value
вызываемая функция:
'value' => function ($model) use($totaleDays) {
array_push($totalDays,$model->class->date);
return $model->class->date;
},
Чтобы передать множественное значение в функцию-значение, вы можете использовать, как показано ниже.
'value' => function ($model) use($var1, $var2....., $varN) {
array_push($totalDays,$model->class->date);
return $model->class->date;
},
Как это use($var1, $var2....., $varN)