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

Atributos de configuração

Use os atributos PHP de DragonCode\LaravelFeed\Attributes para configurar o conversor de um feed e o formato de data de seus itens sem alterar as configurações de toda a aplicação.

AtributoAplicar aRepetível
Config(string $name, mixed $value)Uma classe FeedSim
DateFormat(string $format)Uma classe FeedItemNão

Ambos os atributos se aplicam a classes. Importe-os do namespace do pacote; Illuminate\Container\Attributes\Config é um atributo separado do Laravel, usado internamente pelos construtores dos conversores.

Atributo Config​

Adicione um #[Config] para cada configuração do conversor. Este feed CSV usa uma vírgula como delimitador e finais de linha do Windows:

namespace App\Feeds;

use App\Feeds\Items\UserFeedItem;
use App\Models\User;
use DragonCode\LaravelFeed\Attributes\Config;
use DragonCode\LaravelFeed\Enums\FeedFormatEnum;
use DragonCode\LaravelFeed\Feeds\Feed;
use DragonCode\LaravelFeed\Feeds\Items\FeedItem;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;

#[Config('delimiter', ',')]
#[Config('lineEnding', "\r\n")]
class UserCsvFeed extends Feed
{
protected FeedFormatEnum $format = FeedFormatEnum::Csv;

public function builder(): Builder
{
return User::query();
}

public function item(Model $model): FeedItem
{
return new UserFeedItem($model);
}
}

Os nomes das configurações são nomes de parâmetros do construtor do conversor, não caminhos de configuração. Use lineEnding, não line_ending nem feeds.converters.csv.line_ending.

FormatoNomes compatíveis
csvdelimiter, enclosure, escape, lineEnding
jsonoptions, pretty
jsonloptions
xml, rsspretty

Somente os valores fornecidos sobrescrevem os padrões da aplicação. Feed::converterOptions() coleta os atributos herdados: as chaves da classe filha sobrescrevem as da classe pai, e a última declaração do mesmo nome em uma classe prevalece. Outros feeds mantêm suas próprias configurações.

Nomes incompatíveis com o formato selecionado lançam InvalidArgumentException. JSON Lines remove JSON_PRETTY_PRINT de options para manter um item por linha.

Os bindings de conversores personalizados devem respeitar os parâmetros de construtor fornecidos. Um ConverterHelper personalizado que sobrescreve get() ou resolve() também deve oferecer suporte a resolveWithOptions(); consulte o contrato de extensão dos conversores.

Atributo DateFormat​

Aplique #[DateFormat] a uma classe de item. O método item() acima seleciona essa classe para cada usuário exportado:

namespace App\Feeds\Items;

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

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

Use os caracteres de formato de data do PHP. Retorne valores brutos de DateTimeInterface, como propriedades Eloquent com cast de data, em toArray(). Strings já serializadas por $model->toArray() não são reformatadas.

A classe ancestral mais próxima com o atributo fornece o formato herdado; um atributo na classe filha o sobrescreve. As datas dos itens são formatadas antes do pipeline normal de transformadores, com precedência sobre os formatos de data específicos do feed e globais, mantendo feeds.date.timezone. Transformadores de strings executados depois ainda podem alterar o valor formatado.

O atributo funciona em todos os formatos de saída, incluindo datas em estruturas JSON/XML aninhadas e atributos de itens XML/RSS retornados por attributes(). Ele não afeta FeedInfo, atributos da raiz nem outras classes de item. Sem ele, o pipeline normal de datas usa o formato configurado, cujo padrão é DATE_ATOM.

Veja também​