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

← Anterior · Voltar ao README · Próximo →

Elementos

Elemento raiz​

Formatos: XML, RSS, JSON

dica

Por padrão, o nome do elemento raiz é derivado do nome-base da classe do feed.

Por exemplo, para a classe App\Feeds\FooBarFeed, o nome é foo_bar.

Para adicionar um elemento raiz e/ou seus atributos, sobrescreva o método root:

namespace App\Feeds;

use App\Models\User;
use DragonCode\LaravelFeed\Data\ElementData;
use DragonCode\LaravelFeed\Feeds\Feed;
use Illuminate\Database\Eloquent\Builder;

use function now;

class RootElementFeed extends Feed
{
public function builder(): Builder
{
return User::query();
}

public function root(): ElementData
{
return new ElementData(
name : 'foo',
attributes: [
'count' => $this->builder()->count(),

'generated_at' => now(),
],
);
}
}

Para desativar a inclusão do elemento raiz, informe um nome vazio: null ou "".

Esse código produzirá o seguinte resultado:

<?xml version="1.0" encoding="UTF-8"?>
<foo count="2" generated_at="2025-09-04T04:08:12+00:00">

<user>
<id>1</id>
<name>User 1</name>
</user>
<user>
<id>2</id>
<name>User 2</name>
</user>

</foo>

Informações​

Formatos: XML, RSS, JSON, JSONL, CSV

Para adicionar informações no início do elemento raiz, quando ele existir, ou sem ele, sobrescreva o método info na classe do feed e crie um objeto que estenda DragonCode\LaravelFeed\Feeds\Info\FeedInfo:

namespace App\Feeds;

use App\Feeds\Info\InfoMethodFeedInfo;
use App\Models\User;
use DragonCode\LaravelFeed\Feeds\Feed;
use DragonCode\LaravelFeed\Feeds\Info\FeedInfo;
use Illuminate\Database\Eloquent\Builder;

class InfoMethodFeed extends Feed
{
public function builder(): Builder
{
return User::query();
}

public function info(): FeedInfo
{
return new InfoMethodFeedInfo;
}
}
namespace App\Feeds\Info;

use DragonCode\LaravelFeed\Feeds\Info\FeedInfo;

use function config;

class InfoMethodFeedInfo extends FeedInfo
{
public function toArray(): array
{
return [
'company' => config('app.name'),
'url' => config('app.url'),
];
}
}

Esse código produzirá o seguinte resultado:

<?xml version="1.0" encoding="UTF-8"?>
<info_method>

<company>Laravel</company>
<url>https://example.com</url>

<user>
<id>1</id>
<name>User 1</name>
</user>
<user>
<id>2</id>
<name>User 2</name>
</user>

</info_method>

Para alterar a ordem de saída do elemento raiz em relação ao bloco de informações, defina o parâmetro beforeInfo no método root:

namespace App\Feeds;

use App\Feeds\Info\InfoMethodFeedInfo;
use App\Models\User;
use DragonCode\LaravelFeed\Data\ElementData;
use DragonCode\LaravelFeed\Feeds\Feed;
use DragonCode\LaravelFeed\Feeds\Info\FeedInfo;
use Illuminate\Database\Eloquent\Builder;

class InfoMethodBeforeFalseTest extends Feed
{
public function builder(): Builder
{
return User::query();
}

public function root(): ElementData
{
return new ElementData(
name : 'info_method',
beforeInfo: false
);
}

public function info(): FeedInfo
{
return new InfoMethodFeedInfo;
}
}

Esse código produzirá o seguinte resultado:

<?xml version="1.0" encoding="UTF-8"?>
<company>Laravel</company>
<url>https://example.com</url>

<info_method>

<user>
<id>1</id>
<name>User 1</name>
</user>
<user>
<id>2</id>
<name>User 2</name>
</user>

</info_method>

Formatos: XML, RSS, JSON

Para alterar o cabeçalho e o rodapé, sobrescreva os métodos header e footer:

namespace App\Feeds;

use App\Models\User;
use DragonCode\LaravelFeed\Feeds\Feed;
use Illuminate\Database\Eloquent\Builder;

class HeaderFooterFeed extends Feed
{
public function builder(): Builder
{
return User::query();
}

public function header(): string
{
return '<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">';
}

public function footer(): string
{
return "\n<g:footer>This is a custom footer element</g:footer>";
}
}

Esse código produzirá o seguinte resultado:

<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<header_footer>

<user>
<id>1</id>
<name>User 1</name>
</user>
<user>
<id>2</id>
<name>User 2</name>
</user>

</header_footer>

<g:footer>This is a custom footer element</g:footer>

Atributos​

Formatos: XML, RSS

namespace App\Feeds;

use App\Feeds\Items\AttributeFeedItem;
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 AttributeFeed extends Feed
{
public function builder(): Builder
{
return User::query();
}

public function item(Model $model): FeedItem
{
return new AttributeFeedItem($model);
}
}
namespace App\Feeds\Items;

use DragonCode\LaravelFeed\Feeds\Items\FeedItem;

class AttributeFeedItem extends FeedItem
{
public function attributes(): array
{
return [
'created_at' => $this->model->created_at,
];
}
}

Esse código produzirá o seguinte resultado:

<?xml version="1.0" encoding="UTF-8"?>
<attribute>

<user created_at="2025-09-04T04:08:12+00:00">
<id>1</id>
<name>User 1</name>
</user>
<user created_at="2025-09-04T04:08:12+00:00">
<id>2</id>
<name>User 2</name>
</user>

</attribute>

Dividir arquivos​

Formatos: XML, RSS, JSON, JSONL, CSV

Se necessário, você pode limitar tanto a quantidade de linhas gravadas em cada arquivo quanto a quantidade de arquivos. Para isso, use as funções perFile e maxFiles.

namespace App\Feeds;

use App\Models\User;
use DragonCode\LaravelFeed\Feeds\Feed;
use Illuminate\Database\Eloquent\Builder;

class AttributeFeed extends Feed
{
public function builder(): Builder
{
return User::query();
}

public function perFile(): int
{
return 100;
}

public function maxFiles(): int
{
return 10;
}
}

Os métodos funcionam de forma independente.

Durante a divisão, um número sequencial será adicionado aos nomes dos arquivos. Exemplo:

  • attribute-1.xml
  • attribute-2.xml
  • attribute-3.xml

Veja também​