Класс 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. Это помогает предотвратить сортировку больших наборов результатов по неиндексированным значениям.
Если вам нужно сортировать по связанным столбцам или синтетическим свойствам, вам потребуется использовать whitelist.
Все столбцы, указанные в списке разрешенных для сортировки столбцов, будут неявно доверены. Вы можете использовать это для сортировки по синтетическим столбцам или столбцам, добавленным в пользовательских операциях поиска, которые могут отсутствовать в схеме.
Значения по умолчанию, предоставляемые в 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 - Значение для записи.
- boolean|строка
$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 - Значение для установки.
- boolean
$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 - Значение по умолчанию, если ключ не существует.
Возвращает
смешанноеДанные конфигурации по указанному ключу или 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 - Значение для установки.
- boolean
$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']
] $_pagingParamssource
protected массив
Параметры постраничной навигации после выполнения операции постраничной навигации.
[]
© 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.8/class-Cake.Datasource.Paginator.html