Pular para o conteúdo principal
Versão: 1.x

← Anterior · Voltar ao README · Próximo →

Criar feeds

observação

A maneira mais prática de criar as classes necessárias é usar o plugin Laravel Idea para o PhpStorm.

Laravel IdeaLaravel Idea

Para criar uma classe de feed, use o comando make:feed no console:

php artisan make:feed <name>

Isso criará um arquivo de feed, por exemplo, app/Feeds/UserFeed.php.

Esse comando também pode criar as classes de item e de informações junto com a classe do feed. Para isso, use as opções --item e --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

Também existem opções abreviadas:

# 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
observação

Ao criar um feed, uma operação ou migração também será criada para adicioná-lo ao banco de dados.

Se o projeto usa o Laravel Deploy Operations, uma classe de operação será criada. Caso contrário, será criada uma classe de migração.

Isso é necessário para adicionar e gerenciar as informações do feed no banco de dados.

Preencher feeds​

Feed​

Preencha a classe principal do feed. Exemplo:

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);
}
}

Item do feed​

Preencha a classe de item do feed. Exemplo:

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,
];
}
}
Valores opcionais​

Para omitir um campo quando seu valor não estiver disponível, retorne uma instância de DragonCode\LaravelFeed\Data\OptionalData como valor:

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,
];
}
}

Os campos opcionais são removidos de objetos JSON e JSON Lines e de elementos XML e RSS, inclusive de campos aninhados comuns. O CSV mantém a posição da coluna e grava um campo vazio.

Se a aplicação usa o Spatie Laravel Data, você pode retornar Spatie\LaravelData\Optional. As duas classes de valor opcional são processadas automaticamente.

use Spatie\LaravelData\Optional;

'updatedAt' => $this->model->updated_at ?? Optional::create(),

Arquivos de saída separados​

Gerar arquivos separados para diferentes condições de negócio é um cenário avançado de saída. Leia o guia de arquivos de saída separados e depois use a receita de vários arquivos de feed por alvo como exemplo completo.

Formato do arquivo​

dica

A lista de formatos disponíveis está na página Formatos compatíveis.

Você pode gerar feeds em formatos diferentes. Uma classe de feed só pode ser exportada corretamente para o formato ao qual se destina, devido ao uso de diretivas e a outras particularidades do formato.

Para aplicar o formato necessário, basta sobrescrever a propriedade $format na classe do feed:

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
{
//
}
}

Veja também​