Служби та контракти виконання
Ці точки входу підтримують програмне генерування, реєстрацію фідів, інтеграцію з планувальником, перетворення скалярних значень і необов'язкові поля.
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, Expression | string $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 зберігає стовпець і записує порожнє поле.