Перейти к основному содержимому
Версия: 1.x

← Предыдущая · Назад к README · Следующая →

Создание фидов

примечание

Удобнее всего создавать необходимые классы с помощью плагина Laravel Idea для PhpStorm.

Laravel IdeaLaravel Idea

Чтобы создать класс фида, используйте консольную команду 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
{
//
}
}

Смотрите также​