Aller au contenu principal
Version: 1.x

← Précédent · Retour au README · Suivant →

Directives

Formats : XML

Directives réservées

Les directives sont disponibles uniquement lors de la génération de flux au format XML.

@attributes​

Indique un tableau d’attributs.

Vous pouvez utiliser une clé nommée @attributes pour ajouter des attributs à un nœud :

namespace App\Feeds;

use App\Feeds\Info\AttributesDirectiveFeedInfo;
use App\Feeds\Items\AttributesDirectiveFeedItem;
use App\Models\User;
use DragonCode\LaravelFeed\Feeds\Feed;
use DragonCode\LaravelFeed\Feeds\Info\FeedInfo;
use DragonCode\LaravelFeed\Feeds\Items\FeedItem;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;

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

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

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

use DragonCode\LaravelFeed\Feeds\Info\FeedInfo;

use function fake;

class AttributesDirectiveFeedInfo extends FeedInfo
{
public function toArray(): array
{
return [
'company' => [
'@attributes' => ['since' => fake()->year],
],

'url' => config('app.url'),
];
}
}
namespace App\Feeds\Items;

use DragonCode\LaravelFeed\Feeds\Items\FeedItem;

class AttributesDirectiveFeedItem extends FeedItem
{
public function toArray(): array
{
return [
'name' => $this->model->name,

'contact' => [
'@attributes' => [
'email' => $this->model->email,
'phone' => '555-000-' . $this->model->id,
],
],
];
}
}

Ce code produit le résultat suivant :

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

<company since="1994"/>
<url>https://example.com</url>

<user>
<name>User 1</name>
<contact email="[email protected]" phone="555-000-1"/>
</user>
<user>
<name>User 2</name>
<contact email="[email protected]" phone="555-000-2"/>
</user>

</attributes_directive>

@value​

Indique la valeur à appliquer « telle quelle ».

astuce

La valeur du champ @value doit être une chaîne de caractères.

Vous pouvez utiliser une clé nommée @value pour ajouter une valeur à un nœud :

namespace App\Feeds\Items;

use DragonCode\LaravelFeed\Feeds\Items\FeedItem;

class ValueDirectiveFeedItem extends FeedItem
{
public function toArray(): array
{
return [
'name' => [
'@value' => $this->model->name,
],

'contact' => [
'@attributes' => ['type' => 'email'],
'@value' => $this->model->email,
],
];
}
}

Ce code produit le résultat suivant :

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

<user>
<name>User 1</name>
<contact type="email">[email protected]</contact>
</user>
<user>
<name>User 2</name>
<contact type="email">[email protected]</contact>
</user>

</value_directive>

@cdata​

Permet d’utiliser du balisage XML sans transformation.

astuce

Vous pouvez également envelopper la valeur d’un nœud dans une section CDATA afin d’utiliser des caractères réservés.

Vous pouvez utiliser une clé nommée @cdata pour ajouter une section CDATA à un nœud :

namespace App\Feeds\Items;

use DragonCode\LaravelFeed\Feeds\Items\FeedItem;

use function sprintf;

class CdataDirectiveFeedItem extends FeedItem
{
public function toArray(): array
{
return [
'name' => [
'@cdata' => sprintf('<h1>%s</h1>', $this->model->name),
],

'email' => $this->model->email,
];
}
}

Ce code produit le résultat suivant :

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

<user>
<name><![CDATA[<h1>User 1</h1>]]></name>
<email>[email protected]</email>
</user>
<user>
<name><![CDATA[<h1>User 2</h1>]]></name>
<email>[email protected]</email>
</user>

</cdata_directive>

@mixed​

Permet d’utiliser directement du balisage XML dans la structure du document.

Pour insérer des fragments XML « tels quels », utilisez la directive @mixed :

namespace App\Feeds\Items;

use DragonCode\LaravelFeed\Feeds\Items\FeedItem;

class MixedDirectiveFeedItem extends FeedItem
{
public function toArray(): array
{
return [
'name' => $this->model->name,

'@mixed' => <<<XML
<some>
<first>Foo</first>
<second>{$this->model->email}</second>
</some>
XML,
];
}
}

Ce code produit le résultat suivant :

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

<user>
<name>User 1</name>
<some>
<first>Foo</first>
<second>[email protected]</second>
</some>
</user>
<user>
<name>User 2</name>
<some>
<first>Foo</first>
<second>[email protected]</second>
</some>
</user>

</mixed_directive>

@custom​

Permet d’énumérer un tableau d’éléments possédant les mêmes clés.

Dans certains cas, vous devez insérer un tableau d’éléments portant les mêmes noms.

Pour cela, ajoutez le symbole @ au début du nom de la clé :

namespace App\Feeds\Items;

use DragonCode\LaravelFeed\Feeds\Items\FeedItem;

use function fake;

class ArrayDirectiveFeedItem extends FeedItem
{
public function toArray(): array
{
return [
'name' => $this->model->name,

'@avatar' => [
fake()->imageUrl(),
fake()->imageUrl(),
],

'@images' => [
[
'@attributes' => ['name' => fake()->words(asText: true)],
'@value' => fake()->imageUrl(),
],
[
'@attributes' => ['name' => fake()->words(asText: true)],
'@value' => fake()->imageUrl(),
],
],
];
}
}

Ce code produit le résultat suivant :

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

<user>
<name>User 1</name>
<avatar>https://via.placeholder.com/640x480.png/00ffff?text=aut</avatar>
<avatar>https://via.placeholder.com/640x480.png/0022dd?text=et</avatar>
<images name="doloremque distinctio facere">https://via.placeholder.com/640x480.png/0099dd?text=ea</images>
<images name="fuga odio expedita">https://via.placeholder.com/640x480.png/00cc77?text=sint</images>
</user>
<user>
<name>User 2</name>
<avatar>https://via.placeholder.com/640x480.png/00ff99?text=est</avatar>
<avatar>https://via.placeholder.com/640x480.png/003300?text=non</avatar>
<images name="distinctio et aliquam">https://via.placeholder.com/640x480.png/0099aa?text=accusantium</images>
<images name="consequatur soluta nemo">https://via.placeholder.com/640x480.png/0099cc?text=ab</images>
</user>

</array_directive>

Voir aussi​