Zum Hauptinhalt springen
Version: 1.x

← Zurück · Zurück zur README · Weiter →

Direktiven

Formate: XML

Reservierte Direktiven

Direktiven stehen nur beim Erzeugen von Feeds im XML-Format zur Verfügung.

@attributes​

Kennzeichnet ein Array von Attributen.

Verwenden Sie einen Schlüssel namens @attributes, um einem Knoten Attribute hinzuzufügen:

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

Dieser Code erzeugt folgendes Ergebnis:

<?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​

Kennzeichnet den anzuwendenden Wert „unverändert“.

Tipp

Der Wert des Felds @value muss eine Zeichenfolge sein.

Verwenden Sie einen Schlüssel namens @value, um einem Knoten einen Wert hinzuzufügen:

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

Dieser Code erzeugt folgendes Ergebnis:

<?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​

Ermöglicht die Verwendung von XML-Markup ohne Umwandlung.

Tipp

Sie können den Wert eines Knotens auch in einen CDATA-Abschnitt einschließen. Dadurch lassen sich reservierte Zeichen verwenden.

Verwenden Sie einen Schlüssel namens @cdata, um einem Knoten CDATA hinzuzufügen:

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

Dieser Code erzeugt folgendes Ergebnis:

<?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​

Ermöglicht die direkte Verwendung von XML-Markup innerhalb der Dokumentstruktur.

Verwenden Sie die Direktive @mixed, um XML-Fragmente unverändert einzufügen:

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

Dieser Code erzeugt folgendes Ergebnis:

<?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​

Beschreibt die Möglichkeit, ein Array von Elementen mit denselben Schlüsseln auszugeben.

In manchen Fällen müssen Sie ein Array aus Elementen mit identischen Namen einfügen.

Fügen Sie dazu am Anfang des Schlüsselnamens das Zeichen @ ein:

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

Dieser Code erzeugt folgendes Ergebnis:

<?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>

Siehe auch​