← Попередня · Назад до 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 тощо.
Повний приклад
Скористайтеся прикладом «Кілька цільових файлів фіду», у якому наведено повний клас фіду, команди генерування та очікувані шляхи до файлів.