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

← Попередня · Назад до README · Наступна →

Окремі вихідні файли для партнера, магазину або локалі

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

Вибір правильного типу розділення

Фраза «розділити фід на файли» може означати два різні механізми:

МетаЩо використовувати
Один відфільтрований результат для кожного партнера, магазину, локалі або іншого бізнес-ключаHasFeedTargets і FeedTarget
Послідовні частини з фіксованою кількістю записів у кожному файліperFile() і, за потреби, maxFiles()
Окремі результати, кожен із яких може містити кілька частинЦілі фіду разом із perFile()

Цілі фіду розділяють дані за змістом, визначеним застосунком. perFile() розділяє один уже вибраний набір даних за кількістю записів.

Як працюють цілі фіду

У таблиці feeds усе одно залишається один рядок для класу фіду. Кожен FeedTarget описує один варіант результату зі стабільним ключем і невеликим знімком параметрів.

Реалізуйте HasFeedTargets у класі фіду. Трейт InteractsWithFeedTargets із пакета надає forTarget() і target(), а клас фіду реалізує виявлення та пошук:

МетодВідповідальність
targets(): iterableЛіниво повертає всі доступні результати для повного запуску команди та запуску за розкладом.
findTarget(string $key): ?FeedTargetВизначає один явно запитаний ключ --target або повертає null.
forTarget(FeedTarget $target): staticПовертає налаштований клон фіду.
target(): FeedTargetПовертає активну ціль усередині builder(), filename() та інших точок виконання.

FeedTarget::$key має бути непорожнім, стабільним, унікальним у межах класу фіду й безпечним для оприлюднення. Ключі не нормалізуються й не очищаються. Вони з'являються в консольному виведенні, JSON для агентів, подіях і контексті помилок.

FeedTarget::$parameters — знімок даних, що належить застосунку та зберігається в завданнях черги. Він має бути невеликим, придатним до серіалізації та не містити секретів. Зберігайте ідентифікатори замість моделей Eloquent.

попередження

Кожна ціль має визначати іншу назву вихідного файлу. Інакше пізніша ціль перезапише попередній результат. Використовуйте ключ цілі в шляху лише тоді, коли застосунок контролює його формат.

Генерування вихідних файлів

Згенеруйте всі цілі, повернуті методом targets():

php artisan feed:generate 123

Згенеруйте одну або кілька вибраних цілей:

php artisan feed:generate 123 --target=42
php artisan feed:generate 123 --target=42 --target=81

Явні ключі використовують findTarget() замість перебирання targets(). Повторювані ключі обробляються один раз у порядку першої появи. Усі запитані ключі визначаються до початку генерування.

Повне перебирання виконується потоково, а не атомарно. Якщо targets() завершується помилкою після повернення кількох значень, попередні цілі вже можуть бути згенеровані або поставлені в чергу. Фід за розкладом генерує всі цілі, а режим черги надсилає окреме завдання для кожної цілі.

Звичайне розділення за кількістю записів застосовується окремо до кожної цілі. Наприклад, partners/42.xml перетворюється на partners/42-1.xml, partners/42-2.xml тощо.

Повний приклад

Скористайтеся прикладом «Кілька цільових файлів фіду», у якому наведено повний клас фіду, команди генерування та очікувані шляхи до файлів.

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