Фіди та дані
Основний API розділяє джерело даних, зіставлення елементів, метадані фіду, структуру виведення та результат генерування.
Feed
DragonCode\LaravelFeed\Feeds\Feed — базовий клас експорту. Реалізуйте builder() і перевизначайте лише ті точки виведення, які потрібні вашому фіду.
abstract public function builder(): Builder
| Метод | Типове значення | Контракт |
|---|---|---|
builder(): Builder | Абстрактний | Повертає запит Eloquent, який використовується як джерело даних. |
item(Model $model): FeedItem | Новий базовий FeedItem | Зіставляє одну модель з елементом виведення. |
transformers(): array | [] | Додає на початок назви класів перетворювачів цього фіду. |
chunkSize(): int | 1000 | Розмір блока запиту до бази даних. |
perFile(): int | 0 | Кількість записів у файлі. Нуль вимикає розділення за кількістю. |
maxFiles(): int | 0 | Максимальна кількість вихідних файлів. Нуль означає відсутність обмеження. |
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(): FeedFormatEnum | Xml | Повертає налаштований формат виведення. |
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 | ?string | null |
attributes | array | [] |
beforeInfo | bool | true |
Установіть name у null або порожній рядок, щоб не виводити кореневий елемент. Установіть beforeInfo у false, щоб записати інформацію фіду перед коренем.
Результат генерування
GeneratorService::feed() повертає GenerationResultData. Його властивість лише для читання paths містить опубліковані файли в порядку виведення. Властивість лише для читання records зіставляє кожен шлях із кількістю записів у відповідному файлі.
Методи програмного генерування та реєстрації наведено в розділі служб і контрактів виконання.
FeedFormatEnum
| Варіант | Значення |
|---|---|
Xml | xml |
Json | json |
JsonLines | jsonl |
Csv | csv |
Rss | rss |