Я использую стандартный GridView для вывода таблички. При пустом списке элементов выводится надпись задаваемая параметром emptyText. С этим все в порядке. Но! Заголовки столбцов при пустом списке меняются на значение параметра attribute для конкретного столбца... Вместо того чтобы оставаться той меткой которая указана в модели методом attributeLabels. Например:
echo GridView::widget([
'dataProvider' => new ArrayDataProvider(['allModels' => $items]),
'columns' => [
[ 'attribute' => 'name' ],
[ 'attribute' => 'phone' ],
],
'emptyText' => 'пусто'
]);
Если элементы есть то отображается так (в соответствии с метками в attributeLabels модели):
| Имя | Телефон |
|------|--------------|
| Тест | +79081234567 |
Но если элементов нет то отображаются названия атрибутов:
| name | phone |
|-------|-------|
| пусто |
Как этого избежать? Указывать дополнительно параметр label у каждого столбца? Но это дублирование меток уже указанных в attributeLabels :( Не очень хотелось бы...
P.S. Логично было бы помимо dataProvider указывать где-то класс модели отдельно и чтобы он уже подтягивал метки оттуда даже если элементов нет... Но я не нашел такой возможности. Кроме разве что filterModel, но тогда добавляются инпуты фильтрации, а мне они не нужны.
У ArrayDataProvider можно задать свойтво modelClass. Пропишите там название своего класса.
Данная ситуация возникает потому, что GridView использует массив данных, а не массив моделей. Если использовать ActiveDataProvider, то заголовки столбцов будут отображаться корректно даже если ничего не найдено.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости