← Попередня · Назад до README · Наступна →
Генерування й розклад
Щоб згенерувати всі активні фіди, скористайтеся консольною командою:
php artisan feed:generate
У результаті буде виконано всі активні фіди (is_active = true) з таблиці feeds або з таблиці, вказаної у файлі config/feeds.php.
Якщо викликати команду без параметра, консоль покаже посилання на всі фіди, навіть на ті, у яких властивість is_active має значення false.
Проте такі фіди не виконуватимуться, а будуть позначені статусом SKIP.
Окремий фід
Указаний фід буде виконано, навіть якщо його вимкнено в таблиці feeds бази даних.
Щоб згенерувати певний фід, викличте консольну команду feed:generate і передайте їй як параметр slug фіду з таблиці feeds:
php artisan feed:generate products
Генерування вибраних вихідних файлів
Для фіду з налаштованими окремими вихідними файлами slug реєстрації вибирає клас фіду, а ключ цілі — окремий результат для партнера, магазину, локалі або іншої сутності.
Запуск фіду без --target ліниво обробляє targets() і генерує всі цілі:
php artisan feed:generate products
Передайте повторюваний параметр --target, щоб згенерувати лише вибрані цілі:
php artisan feed:generate products --target=42
php artisan feed:generate products --target=42 --target=81
Явні ключі використовують findTarget() замість перебирання targets(). Повторювані ключі обробляються один раз у порядку першої появи. Усі запитані ключі визначаються до початку генерування.
Для --target потрібен один slug реєстрації фіду. Команда відхиляє порожні й невідомі ключі, а також вибір цілі для фіду, який не реалізує HasFeedTargets.
Повне перебирання цілей потокове, а не атомарне. Якщо targets() завершується помилкою після повернення кількох значень, попередні цілі вже можуть бути згенеровані або поставлені в чергу. Порожня послідовність нічого не генерує й не створює неявну типову ціль.
Виведення для ШІ-агентів
Коли feed:generate виконується всередині ШІ-агента для роботи з кодом, розпізнаного Laravel Agent Detector, команда автоматично виводить один об’єкт JSON замість індикаторів прогресу та форматованих рядків стану. Додатковий параметр команди не потрібен. Поза розпізнаним агентом звичайне консольне виведення не змінюється.
Під час прямого генерування кожен створений фід містить список усіх опублікованих файлів і кількість записів у кожному з них:
{
"tool": "feed:generate",
"result": "success",
"feeds": [
{
"class": "App\\Feeds\\SitemapFeed",
"status": "generated",
"files": [
{
"path": "/var/www/html/storage/app/public/sitemap.xml",
"records": 1250
}
]
},
{
"class": "App\\Feeds\\DisabledFeed",
"status": "skipped"
}
]
}
Команда виводить компактний JSON одним рядком. У прикладі його форматовано лише для зручності читання.
| Статус | Значення | Додаткові поля |
|---|---|---|
generated | Файли фіду створено безпосередньо. | files з полями path і records для кожного файлу |
queued | Режим черги ввімкнено, і завдання фіду виконано синхронно для агента. | Немає |
skipped | Фід неактивний, а команду виконано без slug фіду. | Немає |
Кожен цільовий запис зі статусом generated або queued також містить поле target із вибраним ключем.
У режимі черги шлях виконання для агента синхронно запускає кожне активне завдання перед поверненням результату JSON. Звичайний шлях із виведенням для людини й далі надсилає завдання через налаштоване підключення до черги.
Ця оболонка JSON використовується лише в разі успішного виконання. Якщо генерування завершується винятком, Laravel обробляє помилку команди звичайним способом і не виводить оболонку помилки JSON.
Черга
Типово генерування фіду виконується в консольному процесі. Для фідів, які потребують багато часу або пам’яті, увімкніть у середовищі режим Laravel Queue:
FEED_QUEUE_ENABLED=true
FEED_QUEUE_CONNECTION=redis
FEED_QUEUE_NAME=feeds
FEED_QUEUE_UNIQUE_TTL=3600
Коли режим черги ввімкнено, feed:generate надсилає по одному завданню для кожного звичайного активного фіду та по одному завданню для кожної вибраної цілі цільового фіду. За асинхронного підключення команда завершується після надсилання завдань. Запустіть обробник черги для вибраного підключення та черги, щоб обробити ці завдання.
FEED_QUEUE_CONNECTIONвибирає підключення до черги. Якщо значення не задано, використовуєтьсяQUEUE_CONNECTION, а потімdatabase.FEED_QUEUE_NAMEвибирає чергу в цьому підключенні. Не задавайте значення, щоб використати типову чергу підключення.FEED_QUEUE_UNIQUE_TTLзадає максимальний час дії блокування унікальності в секундах. Звичайні завдання унікальні за класом фіду. Цільові завдання унікальні за класом фіду та ключем цілі; параметри цілі не змінюють цю ідентичність.
Підключення sync негайно виконує кожне завдання в консольному процесі. Виберіть асинхронне підключення, щоб передати генерування обробнику. Установіть FEED_QUEUE_ENABLED=false, щоб генерувати фіди безпосередньо, без надсилання завдань.
Розклад
Вираз під час реєстрації
Під час створення реєстрації фіду передайте звичайний рядок cron-виразу або об’єкт DragonCode\LaravelFeed\Scheduling\Expression із ланцюжковими викликами.
use App\Feeds\ProductFeed;
use DragonCode\LaravelFeed\Queries\FeedQuery;
use DragonCode\LaravelFeed\Scheduling\Expression;
app(FeedQuery::class)->create(
class: ProductFeed::class,
title: 'Products',
expression: (new Expression)
->weekly()
->mondays()
->at('13:00'),
);
У прикладі з ланцюжковими викликами зберігається 0 13 * * 1. Звичайні рядки, зокрема підтримувані dragonmantank/cron-expression псевдоніми на кшталт @daily, і далі можна передавати безпосередньо.
Доступні методи з ланцюжковими викликами відповідають варіантам частоти в установленій версії Laravel. Актуальний список для Laravel 13 наведено в довіднику з частоти. Доступні лише методи, результат яких можна зберегти як стабільний cron-вираз із п’ятьма полями. Інтервали коротші за хвилину, часові пояси, обмеження часовими вікнами та lastDayOfMonth() недоступні для цього об’єкта-значення.
Автоматичний
Для автоматичного генерування фідів використовуйте розклад. Додайте виклик допоміжного класу до файлу routes/console.php, якщо ви не змінили типовий шлях:
use DragonCode\LaravelFeed\Helpers\ScheduleFeedHelper;
use Illuminate\Support\Facades\Schedule;
ScheduleFeedHelper::register();
Schedule::call(function () {
// ... other action
})->everySecond();
Це реєструє всі активні фіди відповідно до розкладу в стовпці expression бази даних. Запланований цільовий фід генерує кожне значення, повернуте targets().
Ручний
Розклад також можна вказати безпосередньо за власними правилами. У такому разі виконуватимуться лише вказані фіди.
use DragonCode\LaravelFeed\Commands\FeedGenerateCommand;
use Illuminate\Support\Facades\Schedule;
Schedule::command(FeedGenerateCommand::class, ['products'])
->withoutOverlapping()
->runInBackground()
->daily();
Schedule::command(FeedGenerateCommand::class, ['sitemap'])
->withoutOverlapping()
->runInBackground()
->hourly();
Schedule::call(function () {
// ... other action
})->everySecond();