Перейти к основному содержимому

Фиды и данные

Основной API разделяет источник данных, отображение элемента, метаданные фида, структуру вывода и результат генерации.

Feed

DragonCode\LaravelFeed\Feeds\Feed — базовый класс экспорта. Реализуйте builder() и переопределяйте только нужные фиду точки вывода.

abstract public function builder(): Builder
МетодЗначение по умолчаниюКонтракт
builder(): BuilderАбстрактныйВозвращает запрос Eloquent, используемый как источник данных.
item(Model $model): FeedItemНовый базовый FeedItemПреобразует одну модель в элемент вывода.
transformers(): array[]Добавляет имена классов преобразователей в начало для этого фида.
chunkSize(): int1000Размер блока запроса к базе данных.
perFile(): int0Количество записей в файле. Ноль отключает разделение по количеству.
maxFiles(): int0Максимальное количество файлов. Ноль не ограничивает его.
header(): stringДекларация XML для XML/RSSСодержимое перед корнем и элементами.
footer(): stringПустая строкаСодержимое после корня и элементов.
root(): ElementDataИмя элемента из имени классаОпределяет корневой элемент и атрибуты.
info(): FeedInfoПустой FeedInfoОпределяет информацию уровня фида.
filename(): stringИмя файла из имени классаВозвращает имя выходного файла относительно диска.
path($suffix): stringПуть от адаптераВозвращает локальный или определённый адаптером путь.
storagePath($suffix): stringИмя файла относительно дискаВозвращает путь для операций с хранилищем.
storage(): FilesystemAdapterДиск publicПолучает и проверяет диск файловой системы Laravel.
format(): FeedFormatEnumXmlВозвращает настроенный формат вывода.

Feed использует Laravel Conditionable и Macroable.

Цели фида

DragonCode\LaravelFeed\Feeds\FeedTarget определяет один независимо генерируемый вывод. Его конструктор принимает непустой строковый ключ и необязательный массив параметров:

public function __construct(public readonly string $key, public readonly array $parameters = [])

Реализуйте DragonCode\LaravelFeed\Contracts\HasFeedTargets в классе фида, которому нужна эта возможность. Необязательный трейт DragonCode\LaravelFeed\Concerns\InteractsWithFeedTargets реализует forTarget() и target(), а класс фида реализует поиск:

МетодКонтракт
targets(): iterableЛениво возвращает все доступные FeedTarget для полного запуска командой или по расписанию.
findTarget(string $key): ?FeedTargetНапрямую разрешает одну явно указанную в команде цель с тем же ключом или возвращает null.
forTarget(FeedTarget $target): staticВозвращает настроенный клон и сбрасывает сохранённое в памяти имя файла.
target(): FeedTargetВозвращает настроенную цель или выбрасывает LogicException, если цель не задана.

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

FeedItem и FeedInfo

FeedItem получает текущую модель Eloquent. Его стандартные значения:

  • name() возвращает базовое имя класса модели в kebab case;
  • attributes() возвращает пустой массив;
  • toArray() возвращает массив модели.

FeedInfo::toArray() возвращает пустой массив. Оба класса используют Conditionable и Macroable; расширяйте их, если выводу нужна явная схема.

ElementData

ElementData — объект только для чтения с тремя свойствами конструктора:

СвойствоТипЗначение по умолчанию
name?stringnull
attributesarray[]
beforeInfobooltrue

Задайте name как null или пустую строку, чтобы не выводить корневой элемент. Задайте beforeInfo как false, чтобы записать информацию фида перед корнем.

Результат генерации

GeneratorService::feed() возвращает GenerationResultData. Свойство только для чтения paths содержит опубликованные файлы по порядку. records сопоставляет каждому пути количество записей в файле.

Методы программной генерации и регистрации перечислены в сервисах и контрактах выполнения.

FeedFormatEnum

ВариантЗначение
Xmlxml
Jsonjson
JsonLinesjsonl
Csvcsv
Rssrss

Смотрите также