Перейти до основного вмісту

Служби та контракти виконання

Ці точки входу підтримують програмне генерування, реєстрацію фідів, інтеграцію з планувальником, перетворення скалярних значень і необов'язкові поля.

GeneratorService

DragonCode\LaravelFeed\Services\GeneratorService генерує та публікує один фід.

public function feed(Feed $feed, ?OutputStyle $output = null): GenerationResultData

Метод публікує всі частини як одну операцію, оновлює останню активність реєстрації, надсилає події життєвого циклу та повертає шляхи з кількістю записів для кожного файлу. Диск і шлях виведення визначаються до початку генерування. Для звичайного фіду винятки цього попереднього етапу, зокрема UnsupportedStorageDiskException, викидаються безпосередньо. Для налаштованого фіду, який реалізує HasFeedTargets, помилки попереднього етапу обгортаються у FeedGenerationException, щоб ключ цілі залишався доступним. Після успішної попередньої перевірки помилки генерування всіх фідів обгортаються, а початковий виняток зберігається як попередній.

Визначайте службу через контейнер Laravel, а не створюйте її внутрішні залежності самостійно.

use App\Feeds\UserFeed;
use DragonCode\LaravelFeed\Services\GeneratorService;

$result = app(GeneratorService::class)->feed(app(UserFeed::class));

foreach ($result->records as $path => $count) {
processFeedResult($path, $count);
}

GeneratorService генерує один налаштований фід і не перебирає цілі. Для прямого виклику спочатку визначте ціль:

use App\Feeds\PartnerFeed;
use DragonCode\LaravelFeed\Services\GeneratorService;
use RuntimeException;

$feed = app(PartnerFeed::class);
$target = $feed->findTarget('42')
?? throw new RuntimeException('Feed target [42] not found.');

$result = app(GeneratorService::class)->feed(
$feed->forTarget($target),
);

FeedQuery

DragonCode\LaravelFeed\Queries\FeedQuery керує збереженими реєстраціями фідів.

МетодРезультат
`create(string $class, string $title, Expressionstring $expression = '0 * * * *', bool $isActive = true, array $extra = []): Feed`
find(int $id): FeedПовертає реєстрацію або створює виняток FeedNotFoundException.
all(): BuilderПовертає всі реєстрації, упорядковані за ID.
active(): BuilderПовертає активні реєстрації, упорядковані за ID.
setLastActivity(string $class): voidОновлює last_activity для класу фіду.
delete(int $id): voidМ'яко видаляє реєстрацію за ID.
deleteByClass(string $class): voidОстаточно видаляє реєстрації класу, зокрема вже м'яко видалені рядки.
restore(int $id): voidВідновлює м'яко видалену реєстрацію.

$expression приймає звичайний рядок cron-виразу, зокрема підтримувані dragonmantank/cron-expression псевдоніми на кшталт @daily, або DragonCode\LaravelFeed\Scheduling\Expression. Об’єкти з ланцюжковими викликами перетворюються на рядок cron до перевірки та збереження. Під час читання моделі повертається збережений рядок. Приклад наведено в розділі «Вираз під час реєстрації».

Для звичайних змін реєстрації використовуйте згенеровану міграцію або операцію розгортання, щоб їх можна було відтворити в усіх середовищах.

ScheduleFeedHelper

DragonCode\LaravelFeed\Helpers\ScheduleFeedHelper::register() додає активні реєстрації до планувальника Laravel. Кожна реєстрація використовує збережений cron-вираз і блокування від накладання. Фонове виконання та час дії блокування беруться з конфігурації feeds.schedule.

Реєстрація безпечно пропускається, якщо налаштованої таблиці фідів не існує.

Transformer

Реалізуйте DragonCode\LaravelFeed\Contracts\Transformer, щоб перетворювати підтримувані значення до серіалізації.

public function allow(mixed $value): bool public function transform(mixed $value): string

allow() визначає, чи приймає перетворювач значення. transform() повертає його серіалізоване скалярне представлення. Додайте клас через Feed::transformers() або feeds.transformers.

OptionalData

Поверніть новий DragonCode\LaravelFeed\Data\OptionalData для поля, яке потрібно пропустити за відсутності значення. XML, RSS, JSON і JSON Lines пропускають його. CSV зберігає стовпець і записує порожнє поле.

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