GridView в Yii2. Простой и наглядный пример использования
Что же это за зверь такой? GridView
- виджет позволяющий отображать данные полученные из DataProvider в виде таблице и управляющие элементы сортировки, фильтрации и пагинации. А теперь к примерам. А теперь к практике...
Минимальный вызов виджета выглядит следующим образом:
echo \yii\grid\GridView::widget( [ /** * Экземпляр класса, который реализует \yii\data\DataProviderInterface. В нашем случае ActiveDataProvider */ 'dataProvider' => $dataProvider, ] );
В этом случае на экран выведутся все поля данных и заголовки. Для этого потребуется только экземпляр класса, который реализует \yii\data\DataProviderInterface
. Это может быть ActiveDataProvider
, ArrayDataProvider
или SqlDataProvider
.
Но, как правило, этого мало. Ниже я представляю расширенный вызов GridView с комментариями:
echo \yii\grid\GridView::widget( [ /** * Экземпляр класса, который реализует \yii\data\DataProviderInterface. В нашем случае ActiveDataProvider */ 'dataProvider' => $dataProvider, /** * Модель которая используется для фильтрации. Она нужна для отображения input-ов поиска в шапке таблицы */ 'filterModel' => new \app\models\Page(), /** * Список колонок которые необходимо отобразить */ 'columns' => [ /** * Столбец нумерации. Отображает порядковый номер строки */ [ 'class' => \yii\grid\SerialColumn::class, ], /** * Перечисленные ниже поля модели отображаются как колонки с данными без изменения */ 'id', 'slug', 'url', 'name', /** * Произвольная колонка с определенной логикой отображения и фильтром в виде выпадающего списка */ [ /** * Название поля модели */ 'attribute' => 'active', /** * Формат вывода. * В этом случае мы отображает данные, как передали. * По умолчанию все данные прогоняются через Html::encode() */ 'format' => 'raw', /** * Переопределяем отображение фильтра. * Задаем выпадающий список с заданными значениями вместо поля для ввода */ 'filter' => [ 0 => 'No', 1 => 'Yes', ], /** * Переопределяем отображение самих данных. * Вместо 1 или 0 выводим Yes или No соответственно. * Попутно оборачиваем результат в span с нужным классом */ 'value' => function ($model, $key, $index, $column) { $active = $model->{$column->attribute} === 1; return \yii\helpers\Html::tag( 'span', $active ? 'Yes' : 'No', [ 'class' => 'label label-' . ($active ? 'success' : 'danger'), ] ); }, ], /** * Пример краткого описания настроек столбца. * Данный способ описания имеет следующий вид attribute_name:output_format:attribute_label. */ 'created_at:datetime:Crete datetime', /** * Пример использования форматера */ [ /** * Имя аттрибута модели */ 'attribute' => 'updated_at', /** * Формат вывода */ 'format' => ['datetime', 'php:Y-m-d h:i:s'], ], /** * Колонка кнопок действий */ [ /** * Указываем класс колонки */ 'class' => \yii\grid\ActionColumn::class, /** * Определяем набор кнопочек. По умолчанию {view} {update} {delete} */ 'template' => '{update} {delete}', ], ], ] );
Выглядит более понятно.
Кроме этого, мы можем задать для GridView ряд других настроек. Перечислю только наиболее частовстречающиеся.
tableOptions
- html-аттрибуты таблицыoptions
- html-аттрибуты контейнера виджетаshowHeader
- Отображать заголовок таблицы?showFooter
- Отобращать футер таблицы?showOnEmpty
- Показывать грид, когда нет результатов?emptyCell
- Текст пустой ячейкиfilterUrl
- Строка или массив для Url::to() на страницу которая должна возвращать результат применения фильтрацииlayout
- Строка-шаблон вывода элементов грида. Например,{pager}\n{summary}\n{items}\n{pager}
Это была лишь малая часть возможностей GridView в качестве вводной(ознакомительной) статьи. Полный список доступных настроек можно увидеть в документации по Yii framework 2.