yii2 GridView ::widget Пример переопределения выводимого текста. "сортировка" по виртуальным атрибутам, заголовок. Перенос строк

Пример переопределения отображаемого текста и работы с виртуальными атрибутами модели:

<?= GridView::widget([
	'dataProvider' => $dataProvider,
	'filterModel' => $searchModel,
	'columns' => [
		['class' => 'yii\grid\SerialColumn'],

		'_id',
		[
			'attribute'=> 'city_id',
			'value' => function ($model, $key, $index, $column) {
	/*выводим виртуальный атрибут 
-- такой подход позволяет "сортировать",
     хотя эта сортировка (при клике по заголовку
 в таблице GridView) будет по факту происходить
 и не по отображаемому значению */
				return $model->cityName; 
			}
		],
		[
			'attribute'=> 'federal_subject_id',
			'value' => function ($model, $key, $index, $column) {
				//выводим виртуальный атрибут -- такой подход позволяет сортировать
				return $model->federalSubjectName; 
			}
		],

		'lastAddDateTime',
		[
'label'  => 'Статус активности', // переопредляем заголовок колонки			
'attribute'=> 'active',
			'value' => function ($model, $key, $index, $column) {
				$result = 'Статус не определён';

 /* подмена отображения логического значения (boolean)*/				
                         if ($model->active) {
					$result = 'Активно';
				} else {
					$result = 'Завершено';
				}

				return $result;
			}
		],

		['class' => 'yii\grid\ActionColumn'],
	],
]); ?>

Перенос строк в заголовке таблицы

Можно вообще явно использовать другой header:

 [
       'header'  => 'Крит.чсл.<br> сообщений',
        'attribute'=> 'LevelCount',
],

-- но этот подход вырубит сортировку, чтобы сортировка сохранилась используйте переопределение label, с выключением обхода html сущностей (код для опредления очередной колонки):

 [
  'attribute' => 'firstname',
  'label' => ' Ваше <br /> Имя',
  'encodeLabel' => false,
 ],

Источники

Key Words for FKN + antitotal forum (CS VSU):