Перейти к основному содержимому
Версия: 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

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