Провайдеры данных виджеты отображения данных в yii2 что это

Провайдеры данных ¶

В разделах Постраничное разделение данных и Сортировка было описано, как сделать возможность для конечных пользователей, чтобы они могли выбирать определённую страницу для вывода данных и сортировку их по некоторым колонкам.

Провайдер данных это класс, который реализует yii\data\DataProviderInterface. Такая реализация поддерживает в основном разбивку на страницы и сортировку. Они обычно используются для работы виджетов данных, что позволяет конечным пользователям интерактивно использовать сортировку данных и их разбивку на страницы.

В Yii реализованы следующие классы провайдеров данных:

Использование всех этих провайдеров данных имеет общую закономерность:

Эти провайдеры данных в некоторой степени различаются по использовании, в зависимости от источника данных. Далее опишем более подробно использование каждого провайдера данных.

ActiveDataProvider ¶

По умолчанию yii\data\ActiveDataProvider использует компонент приложения db для подключения к базе данных. Можно использовать разные базы данных, настроив подключение через конфигурацию свойства yii\data\ActiveDataProvider::$db.

SqlDataProvider ¶

Совет: Свойство yii\data\SqlDataProvider::totalCount обязательно только тогда, когда вам нужна разбивка на страницы. Всё потому, что запрос SQL sql будет изменяться провайдером данных для возврата только текущей запрошенной страницы. Провайдеру необходимо знать общее количество данных в запросе для корректного вычисления разбивки на доступные страницы.

ArrayDataProvider ¶

yii\data\ArrayDataProvider лучше использовать для работы с большим массивом. Этот провайдер помогает вернуть выборку из большого массива с сортировкой по одному или нескольким колонкам. Для использования yii\data\ArrayDataProvider необходимо определить свойство allModels, как большой массив. Элементы в большом массиве могут быть ассоциативными массивами (например, результаты выборки из DAO) или объекты (экземпляры Active Record). Например:

Note: По сравнению с Active Data Provider и SQL Data Provider, ArrayDataProvider менее эффективный, потому что требует загрузки всех данных в память.

Принципы работы с ключами данных ¶

В вышеописанном примере, так как yii\data\ActiveDataProvider предоставляется один yii\db\ActiveQuery объект, то в этом случае провайдер достаточно умён, чтобы вернуть значения первичных ключей в качестве идентификатора. Также есть возможность настроить способ вычисления значения идентификатора, через настройку yii\data\ActiveDataProvider::$key, как имя колонки или функцию вычисления значений ключа. Например:

Создание своего провайдера данных ¶

Ниже приведён пример провайдера данных, который эффективно считывает данные из CSV:

Page generated on Sun, 10 Jan 2021 09:27:43 +0000

Источник

Провайдеры данных ¶

В разделах Постраничное разделение данных и Сортировка было описано, как сделать возможность для конечных пользователей, чтобы они могли выбирать определённую страницу для вывода данных и сортировку их по некоторым колонкам.

Провайдер данных это класс, который реализует yii\data\DataProviderInterface. Такая реализация поддерживает в основном разбивку на страницы и сортировку. Они обычно используются для работы виджетов данных, что позволяет конечным пользователям интерактивно использовать сортировку данных и их разбивку на страницы.

В Yii реализованы следующие классы провайдеров данных:

Использование всех этих провайдеров данных имеет общую закономерность:

Эти провайдеры данных в некоторой степени различаются по использовании, в зависимости от источника данных. Далее опишем более подробно использование каждого провайдера данных.

ActiveDataProvider ¶

По умолчанию yii\data\ActiveDataProvider использует компонент приложения db для подключения к базе данных. Можно использовать разные базы данных, настроив подключение через конфигурацию свойства yii\data\ActiveDataProvider::$db.

SqlDataProvider ¶

yii\data\SqlDataProvider работает с сырыми запросами SQL, которые используются для извлечение необходимых данных. Основываясь на спецификации из sort и pagination, провайдер данных будет добавлять конструкции ORDER BY и LIMIT к SQL-запросу, для возврата только запрошенной страницы данных с учётом определённой сортировки.

Для использования yii\data\SqlDataProvider, необходимо настроить свойства sql и totalCount. Например:

Совет: Свойство totalCount обязательно только тогда, когда вам нужна разбивка на страницы. Всё потому, что запрос SQL sql будет изменяться провайдером данных для возврата только текущей запрошенной страницы. Провайдеру необходимо знать общее количество данных в запросе для корректного вычисления разбивки на доступные страницы.

ArrayDataProvider ¶

yii\data\ArrayDataProvider лучше использовать для работы с большим массивом. Этот провайдер помогает вернуть выборку из большого массива с сортировкой по одному или нескольким колонкам. Для использования yii\data\ArrayDataProvider необходимо определить свойство allModels, как большой массив. Элементы в большом массиве могут быть ассоциативными массивами (например, результаты выборки из DAO) или объекты (экземпляры Active Record). Например:

Примечание: По сравнению с Active Data Provider и SQL Data Provider, ArrayDataProvider менее эффективный, потому что требует загрузки всех данных в память.

Принципы работы с ключами данных ¶

В вышеописанном примере, так как yii\data\ActiveDataProvider предоставляется один yii\db\ActiveQuery объект, то в этом случае провайдер достаточно умён, чтобы вернуть значения первичных ключей в качестве идентификатора. Также есть возможность настроить способ вычисления значения идентификатора, через настройку yii\data\ActiveDataProvider::$key, как имя колонки или функцию вычисления значений ключа. Например:

Создание своего провайдера данных ¶

Ниже приведён пример провайдера данных, который эффективно считывает данные из CSV:

Источник

Провайдеры данных

В разделах Постраничное разделение данных и Сортировка было описано, как сделать возможность для конечных пользователей, чтобы они могли выбирать определённую страницу для вывода данных и сортировку их по некоторым колонкам.

Провайдер данных это класс, который реализует [[yii\data\DataProviderInterface]]. Такая реализация поддерживает в основном разбивку на страницы и сортировку. Они обычно используются для работы виджетов данных, что позволяет конечным пользователям интерактивно использовать сортировку данных и их разбивку на страницы.

В Yii реализованы следующие классы провайдеров данных:

Использование всех этих провайдеров данных имеет общую закономерность:

Эти провайдеры данных в некоторой степени различаются по использовании, в зависимости от источника данных. Далее опишем более подробно использование каждого провайдера данных.

ActiveDataProvider

По умолчанию, [[yii\data\ActiveDataProvider]] использует компонент приложения db для подключения к базе данных. Можно использовать разные базы данных, настроив подключение через конфигурацию свойства [[yii\data\ActiveDataProvider::db]].

SqlDataProvider

[[yii\data\SqlDataProvider]] работает с сырыми запросами SQL, которые используются для извлечение необходимых данных. Основываясь на спецификации из [[yii\data\SqlDataProvider::sort|sort]] и [[yii\data\SqlDataProvider::pagination|pagination]], провайдер данных будет добавлять ORDER BY и LIMIT конструкции к SQL запросу, для возврата только запрошенной страницы данных с учётом определённой сортировки.

Для использования [[yii\data\SqlDataProvider]], необходимо настроить свойства [[yii\data\SqlDataProvider::sql|sql]] и [[yii\data\SqlDataProvider::totalCount|totalCount]]. Например:

Совет: Свойство [[yii\data\SqlDataProvider::totalCount|totalCount]] обязательно только тогда, когда вам нужна разбивка на страницы. Всё потому, что запрос SQL [[yii\data\SqlDataProvider::sql|sql]] будет изменяться провайдером данных для возврата только текущей запрошенной страницы. Провайдеру необходимо знать общее количество данных в запросе для корректного вычисления разбивки на доступные страницы.

ArrayDataProvider

[[yii\data\ArrayDataProvider]] лучше использовать для работы с большим массивом. Этот провайдер помогает вернуть выборку из большого массива с сортировкой по одному или нескольким колонкам. Для использования [[yii\data\ArrayDataProvider]] необходимо определить свойство [[yii\data\ArrayDataProvider::allModels|allModels]], как большой массив. Элементы в большом массиве могут быть ассоциативными массивами (например результаты выборки из DAO) или объекты ( Active Record экземпляры). Например:

Note: Сравнивая с Active Data Provider и SQL Data Provider, ArrayDataProvider менее эффективный потому, что требует загрузки всех данных в память.

Принципы работы с ключами данных

В вышеописанном примере, так как [[yii\data\ActiveDataProvider]] предоставляется один [[yii\db\ActiveQuery]] объект, то в этом случае провайдер достаточно умён, чтобы вернуть значения первичных ключей в качестве идентификатора. Также есть возможность настроить способ вычисления значения идентификатора, через настройку [[yii\data\ActiveDataProvider::key]], как имя колонки или функцию вычисления значений ключа. Например:

Создание своего провайдера данных

Ниже приведён пример провайдера данных, который эффективно считывает данные из CSV:

Источник

Провайдеры данных

В разделах Постраничное разделение данных и Сортировка было описано, как сделать возможность для конечных пользователей, чтобы они могли выбирать определённую страницу для вывода данных и сортировку их по некоторым колонкам.

Провайдер данных это класс, который реализует yii\data\DataProviderInterface. Такая реализация поддерживает в основном разбивку на страницы и сортировку. Они обычно используются для работы виджетов данных, что позволяет конечным пользователям интерактивно использовать сортировку данных и их разбивку на страницы.

В Yii реализованы следующие классы провайдеров данных:

Использование всех этих провайдеров данных имеет общую закономерность:

Эти провайдеры данных в некоторой степени различаются по использовании, в зависимости от источника данных. Далее опишем более подробно использование каждого провайдера данных.

ActiveDataProvider #

По умолчанию yii\data\ActiveDataProvider использует компонент приложения db для подключения к базе данных. Можно использовать разные базы данных, настроив подключение через конфигурацию свойства yii\data\ActiveDataProvider::db.

SqlDataProvider #

yii\data\SqlDataProvider работает с сырыми запросами SQL, которые используются для извлечение необходимых данных. Основываясь на спецификации из sort и pagination, провайдер данных будет добавлять конструкции ORDER BY и LIMIT к SQL-запросу, для возврата только запрошенной страницы данных с учётом определённой сортировки.

Для использования yii\data\SqlDataProvider, необходимо настроить свойства sql и totalCount. Например:

Совет: Свойство totalCount обязательно только тогда, когда вам нужна разбивка на страницы. Всё потому, что запрос SQL sql будет изменяться провайдером данных для возврата только текущей запрошенной страницы. Провайдеру необходимо знать общее количество данных в запросе для корректного вычисления разбивки на доступные страницы.

ArrayDataProvider #

yii\data\ArrayDataProvider лучше использовать для работы с большим массивом. Этот провайдер помогает вернуть выборку из большого массива с сортировкой по одному или нескольким колонкам. Для использования yii\data\ArrayDataProvider необходимо определить свойство allModels, как большой массив. Элементы в большом массиве могут быть ассоциативными массивами (например, результаты выборки из DAO) или объекты (экземпляры Active Record). Например:

Note: По сравнению с Active Data Provider и SQL Data Provider, ArrayDataProvider менее эффективный, потому что требует загрузки всех данных в память.

Принципы работы с ключами данных #

В вышеописанном примере, так как yii\data\ActiveDataProvider предоставляется один yii\db\ActiveQuery объект, то в этом случае провайдер достаточно умён, чтобы вернуть значения первичных ключей в качестве идентификатора. Также есть возможность настроить способ вычисления значения идентификатора, через настройку yii\data\ActiveDataProvider::key, как имя колонки или функцию вычисления значений ключа. Например:

Создание своего провайдера данных #

Ниже приведён пример провайдера данных, который эффективно считывает данные из CSV:

Источник

Виджеты для данных

Yii предоставляет набор виджетов, которые могут быть использованы для отображения данных. В то время как виджет DetailView может быть использован для отображения данных по одной записи, то виджеты ListView и GridView могут быть использованы для показа данных в виде списка или таблицы с возможностью сортировки, фильтрации и разбивки данных постранично.

DetailView

Виджет [[yii\widgets\DetailView|DetailView]] отображает детали по данным для одной [[yii\widgets\DetailView::$model|model]].

DetailView использует свойство [[yii\widgets\DetailView::$attributes|$attributes]] для определений, какие атрибуты модели должны быть показаны и в каком формате. Обратитесь к разделу Форматирование данных за возможными настройками форматирования.

Обычное использование DetailView сводится к следующему коду:

ListView

Виджет [[yii\widgets\ListView|ListView]] использует для отображения информации провайдера данных. Каждая модель отображается, используя определённый [[yii\widgets\ListView::$itemView|вид]]. Поскольку провайдер включает в себя разбивку на страницы, сортировку и фильтрацию, то его использование удобно для отображения информации конечному пользователю и создания интерфейса управления данными.

Обычное использование сводится к следующему коду:

_post файл вид, который может содержать следующее:

Если необходимо послать дополнительные данные в каждый вид, то можно использовать свойство [[yii\widgets\ListView::$viewParams|$viewParams]] как ключ-значение, например:

Они также станут доступны в виде в качестве переменных.

GridView

Каждая строка из таблицы представлена данными из одиночной записи и колонка, как правило, представляет собой атрибут записи (некоторые столбцы могут соответствовать сложным выражениям атрибутов или статическому тексту).

Минимальный код, который необходим для использования GridView:

В вышеприведённом коде сначала создаётся провайдер данных и затем используется GridView для отображения атрибутов для каждого элемента из провайдера данных. Отображенная таблица оснащена функционалом сортировки и разбивки на страницы из коробки.

Колонки таблицы

Колонки таблицы настраиваются с помощью определённых [[yii\grid\Column]] классов, которые настраиваются в свойстве [[yii\grid\GridView::columns|columns]] виджета GridView. В зависимости от типа колонки и их настроек, данные отображаются по разному. По умолчанию это класс [[yii\grid\DataColumn]], который представляет атрибут модели с возможностью сортировки и фильтрации по нему.

Учтите, что если [[yii\grid\GridView::columns|columns]] не сконфигурирована, то Yii попытается отобразить все возможные колонки из провайдера данных.

Классы колонок

Колонки таблицы могут быть настроены, используя различные классы колонок:

В дополнение к классам колонок от Yii, вы можете самостоятельно создать свой собственный класс.

Каждый класс колонки наследуется от [[yii\grid\Column]], так что есть некоторые общие параметры, которые можно установить при настройке колонок.

[[yii\grid\Column::content|content]] позволяет передавать действительный обратный вызов, который будет возвращать данные для строки.Формат следующий:

Вы можете задать различные параметры контейнера HTML через массивы:

DataColumn

[[yii\grid\DataColumn|Data column]] используется для отображения и сортировки данных. По умолчанию этот тип используется для всех колонок.

Доступный список форматов смотрите в разделе Форматирование данных.

Для конфигурации колонок данных также доступен короткий вид записи, который описан в API документации для [[yii\grid\GridView::columns|колонок]].

ActionColumn

[[yii\grid\ActionColumn|ActionColumn]] отображает кнопки действия, такие как изменение или удаление для каждой строки.

Доступные свойства для конфигурации:

[[yii\grid\ActionColumn::buttons|buttons]] массив из функций для отображения кнопок. Ключи массива представлены как имена кнопок (как описывалось выше), а значения представлены в качестве анонимных функций, которые выводят кнопки. Замыкания должны использоваться в следующем виде:

[[yii\grid\ActionColumn::urlCreator|urlCreator]] замыкание, которое создаёт URL используя информацию из модели. Вид замыкания должен быть таким же как и в [[yii\grid\ActionColumn::createUrl()]]. Если свойство не задано, то URL для кнопки будет создана используя метод [[yii\grid\ActionColumn::createUrl()]].

[[yii\grid\ActionColumn::visibleButtons|visibleButtons]] это массив условий видимости каждой из кнопок. Ключи массива представлены как имена кнопок (как описывалось выше), а значения представлены как булево значение или анонимная функция. Если имя кнопки не описано в массиве, она будет отображена по умолчанию. Замыкания должны использоваться в следующем виде:

Или вы можете передать булево значение:

CheckboxColumn

[[yii\grid\CheckboxColumn|Checkbox column]] отображает колонку как флаг (сheckbox).

Для добавления CheckboxColumn в виджет GridView, необходимо добавить его в [[yii\grid\GridView::$columns|columns]]:

Пользователи могут нажимать на флаги для выделения строк в таблице. Отмеченные строки могут быть обработаны с помощью JavaScript кода:

SerialColumn

[[yii\grid\SerialColumn|Serial column]] выводит в строках номера начиная с 1 и увеличивая их по мере вывода строк.

Использование очень простое :

Сортировка данных

Note: Эта секция под разработкой

Фильтрация данных

Для поиска возможных Post моделей, можно создать PostSearch наподобие следующего примера:

Теперь можно использовать этот метод в контроллере, чтобы получить провайдер данных для GridView:

Отдельная форма фильтрации

Фильтров в шапке GridView достаточно для большинства задач, но добавление отдельной формы фильтрации не представляет особой сложности. Она бывает полезна в случае необходимости фильтрации по полям, которые не отображаются в GridView или особых условий фильтрации, например по диапазону дат.

Создайте частичное представление _search.php со следующим содержимым:

и добавьте его отображение в index.php таким образом:

Для фильтра по диапазону дат мы можем добавить дополнительные атрибуты createdFrom и createdTo в поисковую модель (их нет в соответствующей таблице модели):

Расширим условия запроса в методе search() :

И добавим соответствующие поля в форму фильтрации:

Отображение зависимых моделей

Для включения сортировки по зависимой колонки необходимо присоединить зависимую таблицу и добавить правило в компонент Sort для провайдера данных.:

Фильтрации также необходим вызов joinWith, как описано выше. Также необходимо определить для поиска столбец в атрибутах и правилах:

В search() просто добавляется другое условие фильтрации:

Например, если вы используете псевдоним au для связи с таблицей автора, то joinWith будет выглядеть так:

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

То же самое верно и для определения сортировки:

Кроме того, при определении [[yii\data\Sort::defaultOrder|defaultOrder]] для сортировки необходимо использовать имя зависимости вместо псевдонима:

Info: Для подробной информации по joinWith и запросам, выполняемым в фоновом режиме, обратитесь к active record документации.

Использование SQL видов для вывода данных, их сортировки и фильтрации.

Теперь необходимо создать ActiveRecord, которая будет отображение данных из этого вида:

Полсе этого вы можете использовать UserView в модели поиска, без каких либо дополнительных условий по сортировки и фильтрации. Все атрибуты будут работать из коробки. Но такая реализация имеет свои плюсы и минусы:

Несколько GridViews на одной странице

Вы можете использовать больше одной GridView на одной странице. Для этого нужно внести некоторые дополнительные настройки для того, чтобы они друг другу не мешали. При использовании нескольких экземпляров GridView вы должны настроить различные имена параметров для сортировки и ссылки для разбиения на страницы так, чтобы каждый GridView имел свою индивидуальный сортировку и разбиение на страницы. Сделать это возможно через настройку [[yii\data\Sort::sortParam|sortParam]] и [[yii\data\Pagination::pageParam|pageParam]] свойств провайдеров данных [[yii\data\BaseDataProvider::$sort|sort]] и [[yii\data\BaseDataProvider::$pagination|pagination]]

Использование GridView с Pjax

Note: Секция находится в стадии разработки

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *