← Zurück · Zurück zur README · Weiter →
Direktiven
Formate: XML
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>
</user>
<user>
<name>User 2</name>
</user>
</attributes_directive>
@value
Kennzeichnet den anzuwendenden Wert „unverändert“.
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>
</user>
<user>
<name>User 2</name>
</user>
</value_directive>
@cdata
Ermöglicht die Verwendung von XML-Markup ohne Umwandlung.
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>
</user>
<user>
<name><![CDATA[<h1>User 2</h1>]]></name>
</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>
</some>
</user>
<user>
<name>User 2</name>
<some>
<first>Foo</first>
</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>