Перейти до основного вмісту
Версія: 1.x

Фіди та дані

Основний 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Повертає налаштований формат виведення.
converterOptions(): array[]Повертає успадковані значення атрибута Config для цього фіду; дочірні ключі перевизначають батьківські.

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; успадковуйте їх, коли виведення потребує явної схеми.

Формат дат елемента​

Додайте #[DateFormat('Y-m-d H:i')] з DragonCode\LaravelFeed\Attributes\DateFormat до класу FeedItem, щоб перевизначити його формат дат.

Повертайте початкові значення DateTimeInterface з toArray() і налаштуйте перетворення дат у моделі. Уже відформатовані рядки повторно не форматуються:

namespace App\Feeds\Items;

use DragonCode\LaravelFeed\Attributes\DateFormat;
use DragonCode\LaravelFeed\Feeds\Items\FeedItem;

#[DateFormat('Y-m-d H:i')]
class ProductFeedItem extends FeedItem
{
public function toArray(): array
{
return [
'finishedAt' => $this->model->finished_at,
'createdAt' => $this->model->created_at,
'updatedAt' => $this->model->updated_at,
];
}
}

Атрибут діє в усіх форматах виведення, зокрема для дат у вкладених структурах JSON/XML і дат, які повертає attributes() для атрибутів елементів XML/RSS.

Найближчий батьківський клас з атрибутом задає успадкований формат; атрибут у дочірньому класі перевизначає його. Атрибут має пріоритет над форматами дат фіду та глобальними форматами, зберігаючи feeds.date.timezone.

FeedInfo, атрибути кореня та інші елементи без цього атрибута використовують звичайний налаштований ланцюжок перетворень.

ElementData​

ElementData — об'єкт лише для читання з трьома властивостями конструктора:

ВластивістьТипТипове значення
name?stringnull
attributesarray[]
beforeInfobooltrue

Установіть name у null або порожній рядок, щоб не виводити кореневий елемент. Установіть beforeInfo у false, щоб записати інформацію фіду перед коренем.

Результат генерування​

GeneratorService::feed() повертає GenerationResultData. Його властивість лише для читання paths містить опубліковані файли в порядку виведення. Властивість лише для читання records зіставляє кожен шлях із кількістю записів у відповідному файлі.

Методи програмного генерування та реєстрації наведено в розділі служб і контрактів виконання.

FeedFormatEnum​

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

Дивіться також​