Класс PaginatorComponent
Этот компонент используется для обработки автоматической постраничной навигации данных модели. Основной способ использования этого компонента — вызов метода paginate(). Также существует удобная обёртка для контроллера.
Настройка постраничной навигации
Настройка постраничной навигации происходит при вызове метода paginate(). Подробности см. в документации этого метода.
- Cake\Controller\Component реализует Cake\Event\EventListenerInterface использует Cake\Core\InstanceConfigTrait , Cake\Log\LogTrait
-
Cake\Controller\Component\PaginatorComponent
Ссылка: http://book.cakephp.org/3.0/ru/controllers/components/pagination.html
Расположение: Controller/Component/PaginatorComponent.php
Резюме свойств
-
$_defaultConfigprotectedНастройки по умолчанию для постраничной навигации.array
Унаследованные свойства
Резюме методов
- _extractFinder() protectedИзвлекает имя и параметры поиска из предоставленных параметров постраничной навигации
- _prefix() protectedДобавляет префикс к полю с алиасом таблицы, если возможно.
- checkLimit() publicПроверяет параметр limit и гарантирует, что он находится в пределах границ maxLimit.
- getDefaults() public
Получить настройки для $model. Если нет настроек для конкретной модели, будут использованы общие настройки.
- implementedEvents() publicПоддерживаемые события этого компонента.
- mergeOptions() public
Объединяет различные параметры, используемые компонентом Pagination. Объединяет настройки из следующих мест:
- paginate() publicОбрабатывает автоматическую постраничную навигацию записей модели.
- validateSort() public
Проверка возможности выполнения сортировки по указанному полю в объекте $object. Можно сортировать по полям или виртуальным полям. Параметр direction также будет валидирован. Кроме того, ключи sort и direction будут преобразованы в удобный для модели ключ order.
Подробное описание методов
_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 и гарантирует, что он находится в пределах границ maxLimit.
Параметры
- массив
$options - Массив параметров с ключом limit для проверки.
Возвращает
массивМассив параметров для постраничной навигации
getDefaults()source public
getDefaults( string $alias , array $settings )
Получить настройки для $model. Если нет настроек для конкретной модели, будут использованы общие настройки.
Параметры
- строка
$alias - Имя модели для получения настроек.
- массив
$settings - Настройки для объединения.
Возвращает
массивМассив настроек постраничной навигации для модели или общие настройки.
implementedEvents()source public
implementedEvents( )
Поддерживаемые события этого компонента.
Возвращает
массивПереопределяет
Cake\Controller\Component::implementedEvents() mergeOptions()source public
mergeOptions( string $alias , array $settings )
Объединяет различные параметры, используемые компонентом Pagination. Объединяет настройки из следующих мест:
- Общие настройки постраничной навигации
- Настройки, специфичные для модели.
- Параметры запроса
Результат этого метода — совокупность всех объединённых наборов параметров. Можно изменить значение конфигурации whitelist для изменения параметров/значений, которые можно задать с помощью параметров запроса.
Параметры
- строка
$alias Алиас модели, которая постранично навигация, если в общих настройках есть ключ с этим значением, настройки этого ключа будут использованы для постраничной навигации вместо общих.
- массив
$settings - Настройки для объединения с данными запроса.
Возвращает
массивОбъединённые параметры.
paginate()source public
paginate( Cake\Datasource\RepositoryInterface|Cake\Datasource\QueryInterface $object , 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'],
]
]; Передача пустого массива в качестве whiteList запрещает сортировку.
Постраничная навигация с пользовательскими методами поиска
Можно выполнять постраничную навигацию с любым типом поиска, определённым в вашей таблице, используя опцию 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 - Таблица или запрос для постраничной навигации.
- массив
$settingsнеобязательно [] - Настройки/конфигурация, используемые для постраничной навигации.
Возвращает
Cake\Datasource\ResultSetInterfaceРезультаты запроса
Исключение
Cake\Network\Exception\NotFoundExceptionvalidateSort()source public
validateSort( Cake\Datasource\RepositoryInterface $object , array $options )
Проверьте, что желаемая сортировка может быть выполнена на $object. Только поля или virtualFields могут быть отсортированы. Параметр direction также будет очищен. Наконец, ключи sort + direction будут преобразованы в модель-дружественный ключ order.
Вы можете использовать параметр whitelist для управления доступными для сортировки столбцами/полями. Это помогает предотвратить сортировку больших наборов результатов по неиндексированным значениям.
Если вам нужно сортировать по связанным столбцам или синтетическим свойствам, вам нужно будет использовать белый список.
Любые столбцы, указанные в белом списке сортировки, будут неявно доверены. Вы можете использовать это для сортировки по синтетическим столбцам или столбцам, добавленным в пользовательских операциях поиска, которые могут отсутствовать в схеме.
Параметры
-
Cake\Datasource\RepositoryInterface$object - Объект репозитория.
- массив
$options - Параметры постраничной навигации, используемые для этого запроса.
Возвращает
массивМассив опций со удалёнными sort + direction и заменёнными на order, если это возможно.
Методы, унаследованные от Cake\Controller\Component
__construct()source public
__construct( Cake\Controller\ComponentRegistry $registry , array $config [] )
Конструктор
Параметры
-
Cake\Controller\ComponentRegistry$registry - ComponentRegistry, который может использовать этот компонент для ленивой загрузки своих компонентов
- массив
$configнеобязательно [] - Массив параметров конфигурации.
__debugInfo()source public
__debugInfo( )
Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.
Возвращает
массив__get()source public
__get( string $name )
Магический метод для ленивой загрузки $components.
Параметры
- строка
$name - Имя компонента для получения.
Возвращает
смешанноеОбъект компонента или null.
initialize()source public
initialize( array $config )
Метод обработки конструктора.
Реализуйте этот метод, чтобы избежать необходимости перезаписи конструктора и вызова родителя.
Параметры
- массив
$config - Параметры конфигурации, предоставленные этому компоненту.
Методы, используемые из 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']);
Параметры
- строка|массив|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->config('key', $value); Установка вложенного значения:
$this->config('some.nested.key', $value); Обновление нескольких параметров конфигурации одновременно:
$this->config(['one' => 'value', 'another' => 'value']);
Параметры
- строка|массив
$key - Ключ для установки или полный массив конфигураций.
- смешанное|null
$valueнеобязательно null - Значение для установки.
Возвращает
$this Сам объект.
Методы, используемые из Cake\Log\LogTrait
log()source public
log( mixed $msg , integer|string $level LogLevel::ERROR , string|array $context [] )
Удобный метод для записи сообщения в журнал. См. Log::write() для получения дополнительной информации о записи в журналы.
Параметры
- смешанное
$msg - Сообщение журнала.
- целое число|строка
$levelнеобязательно LogLevel::ERROR - Уровень ошибки.
- строка|массив
$contextнеобязательно [] - Дополнительные данные журнала, относящиеся к этому сообщению.
Возвращает
булевоУспех записи в журнал.
Подробное описание свойств
$_defaultConfigsource
protected массив
Настройки по умолчанию для постраничной навигации.
При вызове paginate() эти настройки будут объединены с конфигурацией, которую вы предоставите.
-
maxLimit- Максимальный лимит, который пользователи могут выбрать для просмотра. По умолчанию 100 -
limit- Начальное количество элементов на странице. По умолчанию 20. -
page- Начальная страница, по умолчанию 1. -
whitelist- Список параметров, которые пользователи могут установить с помощью параметров запроса. Изменение этого списка позволит пользователям иметь больше влияния на постраничную навигацию, будьте внимательны с тем, что вы разрешаете.
[
'page' => 1,
'limit' => 20,
'maxLimit' => 100,
'whitelist' => ['limit', 'sort', 'page', 'direction']
]
© 2005–2017 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.3/class-Cake.Controller.Component.PaginatorComponent.html