← Предыдущая · Назад к README · Следующая →
Создание фидов
Чтобы создать класс фида, используйте консольную команду make:feed:
php artisan make:feed <name>
Команда создаст файл фида, например app/Feeds/UserFeed.php.
Эта консольная команда также может создать вместе с классом фида классы элемента и информации. Для этого используйте параметры --item и --info.
# Create a feed class and info class
php artisan make:feed <name> --info
# Create a feed class and item class
php artisan make:feed <name> --item
# Create a feed class, item class, and info class
php artisan make:feed <name> --item --info
Также доступны короткие параметры:
# Create a feed class and item class
php artisan make:feed <name> -t
# Create a feed class and info class
php artisan make:feed <name> -i
# Create a feed class, item class, and info class
php artisan make:feed <name> -it
При создании фида также будет создана операция или миграция для его добавления в базу данных.
Если проект использует Laravel Deploy Operations, будет создан класс операции. В противном случае будет создан класс миграции.
Это необходимо для добавления информации о фиде в базу данных и управления ею.
Заполнение фидов
Фид
Заполните основной класс фида. Например:
namespace App\Feeds;
use App\Feeds\Items\UserFeedItem;
use App\Models\User;
use DragonCode\LaravelFeed\Feeds\Feed;
use DragonCode\LaravelFeed\Feeds\Items\FeedItem;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class UserFeed extends Feed
{
public function builder(): Builder
{
return User::query()
->whereNotNull('email_verified_at')
->where('created_at', '>', now()->subYear());
}
public function item(Model $model): FeedItem
{
return new UserFeedItem($model);
}
}
Элемент фида
Заполните класс элемента фида. Например:
namespace App\Feeds\Items;
use DragonCode\LaravelFeed\Feeds\Items\FeedItem;
/** @property-read \App\Models\User $model */
class UserFeedItem extends FeedItem
{
public function toArray(): array
{
return [
'name' => $this->model->name,
'email' => $this->model->email,
];
}
}
Необязательные значения
Чтобы пропустить поле, если его значение недоступно, верните для него экземпляр DragonCode\LaravelFeed\Data\OptionalData:
namespace App\Feeds\Items;
use DragonCode\LaravelFeed\Data\OptionalData;
use DragonCode\LaravelFeed\Feeds\Items\FeedItem;
class UserFeedItem extends FeedItem
{
public function toArray(): array
{
return [
'id' => $this->model->id,
'name' => $this->model->name,
'cityId' => $this->model->city?->id ?? new OptionalData,
'createdAt' => $this->model->created_at,
'updatedAt' => $this->model->updated_at ?? new OptionalData,
];
}
}
Необязательные поля удаляются из объектов JSON и JSON Lines, а также из элементов XML и RSS, включая обычные вложенные поля. CSV сохраняет позицию столбца и записывает пустое поле.
Если приложение использует Spatie Laravel Data, вместо этого можно вернуть Spatie\LaravelData\Optional. Оба класса необязательных значений обрабатываются автоматически.
use Spatie\LaravelData\Optional;
'updatedAt' => $this->model->updated_at ?? Optional::create(),
Отдельные выходные файлы
Генерация отдельных файлов для разных бизнес-условий — расширенный сценарий вывода. Прочитайте руководство по отдельным файлам, затем используйте рецепт «Несколько целевых файлов фида» как полный пример.
Формат файла
Список доступных форматов находится на странице поддерживаемых форматов.
Фиды можно генерировать в разных форматах. Класс фида можно корректно экспортировать только в формат, для которого он предназначен. Это связано с использованием директив и другими особенностями формата.
Чтобы задать нужный формат, просто переопределите в классе фида свойство $format:
namespace App\Feeds;
use DragonCode\LaravelFeed\Enums\FeedFormatEnum;
use DragonCode\LaravelFeed\Feeds\Feed;
use Illuminate\Database\Eloquent\Builder;
class UserFeed extends Feed
{
protected FeedFormatEnum $format = FeedFormatEnum::Json;
public function builder(): Builder
{
//
}
}

