Класс Paginator
Этот класс используется для обработки автоматической постраничной навигации данных модели.
- Cake\Datasource\Paginator реализует Cake\Datasource\PaginatorInterface использует Cake\Core\InstanceConfigTrait
Краткое описание свойств
-
$_defaultConfigprotectedНастройки по умолчанию для постраничной навигации.array -
$_pagingParamsprotectedПараметры постраничной навигации после выполнения операции.array
Унаследованные свойства
Краткое описание методов
- _extractFinder() protectedИзвлекает имя и опции поиска из предоставленных опций постраничной навигации.
- _prefix() protectedДобавляет префикс к полю с алиасом таблицы, если возможно.
- checkLimit() publicПроверяет параметр limit и убеждается, что он находится в пределах максимальных значений.
- 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 - Указание того, было ли поле включено в список разрешённых.
Возвращает
массивМассив с окончательной сортировкой.
checkLimit()source public
checkLimit( array $options )
Проверяет параметр limit и убеждается, что он находится в пределах максимальных значений.
Параметры
- массив
$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'],
]
]; Передача пустого массива в качестве списка разрешённых полей запрещает сортировку.
Постраничная навигация с пользовательскими finders
Вы можете выполнить постраничную навигацию с любым типом поиска, определённым для вашей таблицы, используя опцию 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.
Вы можете использовать параметр white-list для управления полями/полями, доступными для сортировки через параметры 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 Истинно для рекурсивного слияния, 'shallow' для простого слияния, ложно для перезаписи, по умолчанию ложно.
Исключения
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 - Выполнять ли рекурсивное слияние или перезаписывать существующую конфигурацию, по умолчанию истинно.
Возвращает
смешанный типЗначение считанной конфигурации или сам объект при операциях записи.
Исключения
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 - Выполнять ли рекурсивное слияние или перезаписывать существующую конфигурацию, по умолчанию истинно.
Возвращает
$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.6/class-Cake.Datasource.Paginator.html