Советы PHP-разработчика

Блог содержащий короткие заметки касающиеся программирования для web.

GridView в Yii2. Простой и наглядный пример использования

GridView в Yii2. Простой и наглядный пример использования

Что же это за зверь такой? GridView - виджет позволяющий отображать данные полученные из DataProvider в виде таблице и управляющие элементы сортировки, фильтрации и пагинации. А теперь к примерам. А теперь к практике...

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

echo \yii\grid\GridView::widget(
    [
    	/**
         * Экземпляр класса, который реализует \yii\data\DataProviderInterface. В нашем случае ActiveDataProvider
         */
        'dataProvider' => $dataProvider,
    ]
);

В этом случае на экран выведутся все поля данных и заголовки. Для этого потребуется только экземпляр класса, который реализует \yii\data\DataProviderInterface. Это может быть ActiveDataProvider, ArrayDataProvider или SqlDataProvider.

Минимальный вызов GridView в Yii2

Но, как правило, этого мало. Ниже я представляю расширенный вызов 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 в Yii2

Кроме этого, мы можем задать для GridView ряд других настроек. Перечислю только наиболее частовстречающиеся.

  • tableOptions - html-аттрибуты таблицы
  • options - html-аттрибуты контейнера виджета
  • showHeader - Отображать заголовок таблицы?
  • showFooter - Отобращать футер таблицы?
  • showOnEmpty - Показывать грид, когда нет результатов?
  • emptyCell - Текст пустой ячейки
  • filterUrl - Строка или массив для Url::to() на страницу которая должна возвращать результат применения фильтрации
  • layout - Строка-шаблон вывода элементов грида. Например, {pager}\n{summary}\n{items}\n{pager}

Это была лишь малая часть возможностей GridView в качестве вводной(ознакомительной) статьи. Полный список доступных настроек можно увидеть в документации по Yii framework 2.

  • 2016-05-25 18:42:51