Класс Paginator
Этот класс используется для обработки автоматической постраничной навигации данных модели.
- Cake\Datasource\Paginator реализует Cake\Datasource\PaginatorInterface использует Cake\Core\InstanceConfigTrait
Краткое описание свойств
-
$_defaultConfigprotectedНастройки по умолчанию для постраничной навигации.array -
$_pagingParamsprotectedПараметры постраничной навигации после выполнения операции.array
Унаследованные свойства
Краткое описание методов
- _extractFinder() protectedИзвлекает имя и опции поиска из предоставленных опций постраничной навигации.
- _prefix() protectedДобавляет префикс к полю с именем таблицы, если возможно.
- _removeAliases() protectedУдаляет алиас, если необходимо.
- checkLimit() publicПроверяет параметр limit и убеждается, что он находится в пределах maxLimit.
- getDefaults() public
Получает настройки для $model. Если для конкретного хранилища настроек нет, используются общие настройки.
- getPagingParams() publicПолучает параметры постраничной навигации после выполнения операции.
- mergeOptions() public
Объединяет различные опции, используемые Paginator. Собирает настройки из следующих мест:
- paginate() publicОбрабатывает автоматическую постраничную навигацию записей модели.
- validateSort() publicПроверяет, что указанная сортировка может быть выполнена на $object.
Подробное описание методов
_extractFinder()source protected
_extractFinder( array $options )
Извлекает имя и опции поиска из предоставленных опций постраничной навигации.
Параметры
- массив
$options - опции постраничной навигации.
Возвращает
массивМассив, содержащий в первой позиции имя поиска и во второй опции, которые должны быть переданы ему.
_prefix()source protected
_prefix( Cake\Datasource\RepositoryInterface $object , array $order , boolean $whitelisted = false )
Добавляет префикс к полю с именем таблицы, если возможно.
Параметры
-
Cake\Datasource\RepositoryInterface$object - Объект репозитория.
- массив
$order - Массив сортировки.
- булево
$whitelistedнеобязательно false - Указывает, был ли поле добавлен в белый список.
Возвращает
массивМассив конечной сортировки.
_removeAliases()source protected
_removeAliases( array $fields , string $model )
Удаляет алиас, если необходимо.
Параметры
- массив
$fields - Текущие поля
- строка
$model - Текущий алиас модели
Возвращает
массив$fields поля без алиасов, где применимо
checkLimit()source public
checkLimit( array $options )
Проверяет параметр limit и убеждается, что он находится в пределах maxLimit.
Параметры
- массив
$options - Массив опций с ключом limit для проверки.
Возвращает
массивМассив опций для постраничной навигации.
getDefaults()source public
getDefaults( string $alias , array $settings )
Получает настройки для $model. Если для конкретного хранилища настроек нет, используются общие настройки.
Параметры
- строка
$alias - Имя модели для получения настроек.
- массив
$settings - Настройки, используемые для объединения.
Возвращает
массивМассив настроек постраничной навигации для модели или общие настройки.
getPagingParams()source public
getPagingParams( )
Получает параметры постраничной навигации после выполнения операции.
Возвращает
массивРеализация
Cake\Datasource\PaginatorInterface::getPagingParams() mergeOptions()source public
mergeOptions( array $params , array $settings )
Объединяет различные опции, используемые Paginator. Собирает настройки из следующих мест:
- Общие настройки постраничной навигации
- Настройки, специфичные для модели.
- Параметры запроса
Результат этого метода — совокупность всех объединённых наборов опций. Можно изменить значение конфигурации whitelist для изменения опций/значений, которые можно задать с помощью параметров запроса.
Параметры
- массив
$params - Параметры запроса.
- массив
$settings - Настройки для объединения с данными запроса.
Возвращает
массивОбъединённый массив опций.
paginate()source public
paginate( Cake\Datasource\RepositoryInterface|Cake\Datasource\QueryInterface $object , array $params = [] , array $settings = [] )
Обрабатывает автоматическую постраничную навигацию записей модели.
Настройка постраничной навигации
При вызове paginate() можно использовать параметр $settings для передачи настроек постраничной навигации. Эти настройки используются для построения запросов и управления другими настройками постраничной навигации.
Если ваши настройки содержат ключ с текущим алиасом таблицы. Данные внутри этого ключа будут использоваться. В противном случае будут использоваться настройки верхнего уровня.
$settings = [ 'limit' => 20, 'maxLimit' => 100 ]; $results = $paginator->paginate($table, $settings);
Вышеуказанные настройки будут использоваться для постраничной навигации любого репозитория. Можно настроить настройки, специфичные для репозитория, присвоив ключу алиас репозитория.
$settings = [
'Articles' => [
'limit' => 20,
'maxLimit' => 100
],
'Comments' => [ ... ]
];
$results = $paginator->paginate($table, $settings); Это позволит иметь разные настройки постраничной навигации для репозиториев Articles и Comments.
Управление полями сортировки
По умолчанию CakePHP автоматически позволяет сортировку по любому столбцу объекта репозитория, по которому выполняется постраничная навигация. Часто вы захотите разрешить сортировку по ассоциированным столбцам или вычисляемым полям. В этих случаях вам необходимо определить белый список всех столбцов, по которым вы хотите разрешить сортировку. Вы можете определить белый список в параметре $settings.
$settings = [
'Articles' => [
'finder' => 'custom',
'sortWhitelist' => ['title', 'author_id', 'comment_count'],
]
]; Передача пустого массива в качестве белого списка запрещает сортировку полностью.
Постраничная навигация с помощью пользовательских методов поиска
Можно выполнить постраничную навигацию с любым типом поиска, определенным в вашей таблице, используя опцию finder.
$settings = [
'Articles' => [
'finder' => 'popular'
]
];
$results = $paginator->paginate($table, $settings); Выполнит постраничную навигацию с помощью метода find('popular').
Также можно передать уже созданный экземпляр запроса в этот метод:
$query = $this->Articles->find('popular')->matching('Tags', function ($q) {
return $q->where(['name' => 'CakePHP'])
});
$results = $paginator->paginate($query); Ограничение параметров запроса
Используя области параметров запроса, можно выполнить постраничную навигацию по нескольким запросам в одном действии контроллера:
$articles = $paginator->paginate($articlesQuery, ['scope' => 'articles']); $tags = $paginator->paginate($tagsQuery, ['scope' => 'tags']);
Каждый из вышеперечисленных запросов будет использовать различные наборы параметров строки запроса для данных постраничной навигации. Пример URL-адреса, выполняя постраничную навигацию по обоим результатам:
/dashboard?articles[page]=1&tags[page]=2
Параметры
-
Cake\Datasource\RepositoryInterface|Cake\Datasource\QueryInterface$object - Таблица или запрос для постраничной навигации.
- массив
$paramsнеобязательно [] - Параметры запроса
- массив
$settingsнеобязательно [] - Настройки/конфигурация, используемая для постраничной навигации.
Возвращает
Cake\Datasource\ResultSetInterfaceРезультаты запроса
Выбрасывает
Cake\Datasource\Exception\PageOutOfBoundsExceptionРеализация
Cake\Datasource\PaginatorInterface::paginate() validateSort()source public
validateSort( Cake\Datasource\RepositoryInterface $object , array $options )
Проверка, что желаемая сортировка может быть выполнена для объекта $object.
Можно сортировать только по полям или виртуальным полям. Параметр направления также будет очищен. Наконец, ключи sort и direction будут преобразованы в модель-дружественный ключ order.
Вы можете использовать параметр whitelist для управления доступными столбцами/полями для сортировки через параметры URL. Это помогает предотвратить возможность пользователям сортировать большие наборы результатов по неиндексированным значениям.
Если вам необходимо сортировать по связанным столбцам или синтетическим свойствам, вам потребуется использовать список разрешенных значений.
Любые столбцы, указанные в списке разрешенных значений для сортировки, будут неявно считаться надежными. Вы можете использовать это для сортировки по синтетическим столбцам или столбцам, добавленным в пользовательские операции поиска, которые могут не существовать в схеме.
Дополнительные параметры сортировки, переданные в paginate(), будут объединены с запрошенным полем/направлением сортировки пользователя.
Параметры
-
Cake\Datasource\RepositoryInterface$object - Объект репозитория.
- массив
$options - Параметры пагинации, используемые для этого запроса.
Возвращает
массивМассив параметров со значениями sort и direction, удаленными и, если возможно, замененными на order.
Методы, используемые из Cake\Core\InstanceConfigTrait
_configDelete()source protected
_configDelete( string $key )
Удаляет один ключ конфигурации.
Параметры
- строка
$key - Ключ для удаления.
Исключения
Cake\Core\Exception\Exceptionпри попытке перезаписать существующую конфигурацию
_configRead()source protected
_configRead( string|null $key )
Читает ключ конфигурации.
Параметры
- строка|null
$key - Ключ для чтения.
Возвращает
смешанное_configWrite()source protected
_configWrite( string|array $key , mixed $value , boolean|string $merge = false )
Записывает ключ конфигурации.
Параметры
- строка|массив
$key - Ключ для записи.
- смешанное
$value - Значение для записи.
- логическое|строка
$mergeнеобязательно false True для рекурсивного объединения, 'shallow' для простого объединения, false для перезаписи, по умолчанию false.
Исключения
Cake\Core\Exception\Exceptionпри попытке перезаписи существующей конфигурации
config()source public устаревший
config( string|array|null $key = null , mixed|null $value = null , boolean $merge = true )
Получает/устанавливает конфигурацию.
Использование
Чтение всей конфигурации:
$this->config();
Чтение определенного значения:
$this->config('key'); Чтение вложенного значения:
$this->config('some.nested.key'); Установка определенного значения:
$this->config('key', $value); Установка вложенного значения:
$this->config('some.nested.key', $value); Обновление нескольких настроек конфигурации одновременно:
$this->config(['one' => 'value', 'another' => 'value']);
Устаревший
3.4.0 используйте setConfig()/getConfig() вместо этого.Параметры
- строка|массив|null
$keyнеобязательно null - Ключ для получения/установки или весь массив конфигураций.
- смешанное|null
$valueнеобязательно null - Значение для установки.
- логическое
$mergeнеобязательно true - Выполнять рекурсивное объединение или перезаписывать существующую конфигурацию, по умолчанию true.
Возвращает
смешанноеЗначение конфигурации, которое читается, или сам объект при операциях записи.
Исключения
Cake\Core\Exception\ExceptionПри попытке установить недопустимый ключ.
configShallow()source public
configShallow( string|array $key , mixed|null $value = null )
Объединяет переданную конфигурацию с существующей. В отличие от config(), которая выполняет рекурсивное объединение для вложенных ключей, этот метод выполняет простое объединение.
Установка определенного значения:
$this->configShallow('key', $value); Установка вложенного значения:
$this->configShallow('some.nested.key', $value); Обновление нескольких настроек конфигурации одновременно:
$this->configShallow(['one' => 'value', 'another' => 'value']);
Параметры
- строка|массив
$key - Ключ для установки или весь массив конфигураций.
- смешанное|null
$valueнеобязательно null - Значение для установки.
Возвращает
$this
getConfig()source public
getConfig( string|null $key = null , mixed $default = null )
Возвращает конфигурацию.
Использование
Чтение всей конфигурации:
$this->getConfig();
Чтение определенного значения:
$this->getConfig('key'); Чтение вложенного значения:
$this->getConfig('some.nested.key'); Чтение со значением по умолчанию:
$this->getConfig('some-key', 'default-value'); Параметры
- строка|null
$keyнеобязательно null - Ключ для получения или null для всей конфигурации.
- смешанное
$defaultнеобязательно null - Значение по умолчанию, возвращаемое, если ключ не найден.
Возвращает
смешанноеЗначение конфигурации, которое читается.
setConfig()source public
setConfig( string|array $key , mixed|null $value = null , boolean $merge = true )
Устанавливает конфигурацию.
Использование
Установка определенного значения:
$this->setConfig('key', $value); Установка вложенного значения:
$this->setConfig('some.nested.key', $value); Обновление нескольких настроек конфигурации одновременно:
$this->setConfig(['one' => 'value', 'another' => 'value']);
Параметры
- строка|массив
$key - Ключ для установки или весь массив конфигураций.
- смешанное|null
$valueнеобязательно null - Значение для установки.
- логическое
$mergeнеобязательно true - Выполнять рекурсивное объединение или перезаписывать существующую конфигурацию, по умолчанию true.
Возвращает
$this
Исключения
Cake\Core\Exception\ExceptionПри попытке установить недопустимый ключ.
Подробности свойств
$_defaultConfigsource
protected массив
Настройки пагинации по умолчанию.
При вызове paginate() эти настройки будут объединены с вашей конфигурацией.
-
maxLimit- Максимальное количество элементов, которое пользователи могут выбрать для просмотра. По умолчанию 100 -
limit- Начальное количество элементов на странице. По умолчанию 20. -
page- Стартовая страница, по умолчанию 1. -
whitelist- Список параметров, которые пользователи могут установить с помощью параметров запроса. Изменение этого списка позволит пользователям иметь больше влияния на пагинацию, будьте осторожны с тем, что вы разрешаете.
[
'page' => 1,
'limit' => 20,
'maxLimit' => 100,
'whitelist' => ['limit', 'sort', 'page', 'direction']
]
© 2005–present The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/3.7/class-Cake.Datasource.Paginator.html