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

Feeds e dados

A API principal separa a fonte de dados, o mapeamento dos itens, os metadados do feed, a estrutura da saída e o resultado da geração.

Feed​

DragonCode\LaravelFeed\Feeds\Feed é a classe-base de uma exportação. Implemente builder() e sobrescreva apenas os pontos de saída necessários.

abstract public function builder(): Builder
MétodoPadrãoContrato
builder(): BuilderAbstratoRetorna a consulta Eloquent usada como fonte de dados.
item(Model $model): FeedItemNovo FeedItem baseMapeia um modelo para um item de saída.
transformers(): array[]Adiciona no início os transformadores deste feed.
chunkSize(): int1000Tamanho do lote da consulta ao banco.
perFile(): int0Registros por arquivo. Zero desativa a divisão por quantidade.
maxFiles(): int0Máximo de arquivos de saída. Zero não impõe limite.
header(): stringDeclaração XML para XML/RSSConteúdo antes da raiz e dos itens.
footer(): stringString vaziaConteúdo depois da raiz e dos itens.
root(): ElementDataNome derivado da classeDefine o elemento raiz e seus atributos.
info(): FeedInfoFeedInfo vazioDefine informações no nível do feed.
filename(): stringNome derivado da classeRetorna o nome de saída relativo ao disco.
path($suffix): stringCaminho resolvido pelo adaptadorRetorna um caminho local ou resolvido pelo adaptador.
storagePath($suffix): stringNome relativo ao discoRetorna o caminho usado nas operações de armazenamento.
storage(): FilesystemAdapterDisco publicResolve e valida o disco do Laravel.
format(): FeedFormatEnumXmlRetorna o formato de saída configurado.
converterOptions(): array[]Retorna os valores herdados do atributo Config para este feed; as chaves do filho sobrescrevem as do pai.

Feed usa Conditionable e Macroable do Laravel.

Alvos de feed​

DragonCode\LaravelFeed\Feeds\FeedTarget identifica uma saída gerada de forma independente. Seu construtor recebe uma chave string não vazia e um array opcional de parâmetros:

public function __construct(public readonly string $key, public readonly array $parameters = [])

Implemente DragonCode\LaravelFeed\Contracts\HasFeedTargets em uma classe de feed que adote esse recurso. O trait opcional DragonCode\LaravelFeed\Concerns\InteractsWithFeedTargets implementa forTarget() e target(); a classe do feed implementa a descoberta:

MétodoContrato
targets(): iterableRetorna sob demanda todos os FeedTarget disponíveis para execuções completas por comando e agendamento.
findTarget(string $key): ?FeedTargetResolve diretamente um alvo explícito do comando com a mesma chave ou retorna null.
forTarget(FeedTarget $target): staticRetorna um clone configurado e redefine seu nome de arquivo memorizado.
target(): FeedTargetRetorna o alvo configurado ou lança LogicException quando nenhum estiver definido.

O construtor rejeita chaves vazias ou formadas apenas por espaços, mas não normaliza nem sanitiza outros valores. Os parâmetros do alvo são opacos para o pacote e serializados como um snapshot do job da fila. A chave identifica o alvo e, por isso, deve ser estável e exclusiva dentro da classe do feed. Consulte a configuração de arquivos de saída separados e a seleção de saída no comando.

FeedItem e FeedInfo​

FeedItem recebe o modelo Eloquent atual. Por padrão:

  • name() retorna o nome-base da classe do modelo em kebab case;
  • attributes() retorna um array vazio;
  • toArray() retorna o array do modelo.

FeedInfo::toArray() retorna um array vazio. As duas classes usam Conditionable e Macroable; estenda-as quando a saída exigir um esquema explícito.

Formato de data de um item​

Aplique #[DateFormat('Y-m-d H:i')] de DragonCode\LaravelFeed\Attributes\DateFormat a uma classe FeedItem para sobrescrever seu formato de data.

Retorne valores brutos de DateTimeInterface em toArray() e configure casts de data no modelo. Strings já formatadas não são reformatadas:

namespace App\Feeds\Items;

use DragonCode\LaravelFeed\Attributes\DateFormat;
use DragonCode\LaravelFeed\Feeds\Items\FeedItem;

#[DateFormat('Y-m-d H:i')]
class ProductFeedItem extends FeedItem
{
public function toArray(): array
{
return [
'finishedAt' => $this->model->finished_at,
'createdAt' => $this->model->created_at,
'updatedAt' => $this->model->updated_at,
];
}
}

O atributo se aplica a todos os formatos de saída, incluindo datas em estruturas JSON/XML aninhadas e datas retornadas por attributes() para atributos de itens XML/RSS.

A classe ancestral mais próxima com o atributo fornece o formato herdado; um atributo na classe filha o sobrescreve. O atributo tem precedência sobre os formatos de data específicos do feed e globais, mantendo feeds.date.timezone.

FeedInfo, os atributos da raiz e outros itens sem esse atributo continuam usando a sequência de transformações configurada normalmente.

ElementData​

ElementData é um objeto somente leitura com três propriedades de construtor:

PropriedadeTipoPadrão
name?stringnull
attributesarray[]
beforeInfobooltrue

Defina name como null ou string vazia para omitir a raiz. Defina beforeInfo como false para gravar as informações antes dela.

Resultado da geração​

GeneratorService::feed() retorna GenerationResultData. A propriedade somente leitura paths contém os arquivos publicados em ordem. records associa cada caminho à quantidade de registros gravados nesse arquivo.

Os métodos de geração e registro programáticos estão em Serviços e contratos de execução.

FeedFormatEnum​

CasoValor
Xmlxml
Jsonjson
JsonLinesjsonl
Csvcsv
Rssrss

Veja também​