Zum Hauptinhalt springen
Version: 1.x

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

Feeds erstellen

Hinweis

Am bequemsten lassen sich die benötigten Klassen mit dem Plugin Laravel Idea für PhpStorm erstellen.

Laravel IdeaLaravel Idea

Verwenden Sie den Konsolenbefehl make:feed, um eine Feed-Klasse zu erstellen:

php artisan make:feed <name>

Dadurch wird eine Feed-Datei erstellt, beispielsweise app/Feeds/UserFeed.php.

Dieser Konsolenbefehl kann zusammen mit der Feed-Klasse auch die Klassen für Elemente und Informationen erstellen. Verwenden Sie dazu die Optionen --item und --info.

# Create a feed class and info class
php artisan make:feed <name> --info

# Create a feed class and item class
php artisan make:feed <name> --item

# Create a feed class, item class, and info class
php artisan make:feed <name> --item --info

Außerdem stehen Kurzformen zur Verfügung:

# Create a feed class and item class
php artisan make:feed <name> -t

# Create a feed class and info class
php artisan make:feed <name> -i

# Create a feed class, item class, and info class
php artisan make:feed <name> -it
Hinweis

Beim Erstellen eines Feeds wird zusätzlich eine Operation oder eine Migration erzeugt, um ihn zur Datenbank hinzuzufügen.

Wenn das Projekt Laravel Deploy Operations verwendet, wird eine Operationsklasse erstellt. Andernfalls wird eine Migrationsklasse erstellt.

Dies ist erforderlich, um Feed-Informationen in der Datenbank hinzuzufügen und zu verwalten.

Feeds befüllen​

Feed​

Befüllen Sie die Hauptklasse des Feeds. Beispiel:

namespace App\Feeds;

use App\Feeds\Items\UserFeedItem;
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 UserFeed extends Feed
{
public function builder(): Builder
{
return User::query()
->whereNotNull('email_verified_at')
->where('created_at', '>', now()->subYear());
}

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

Feed-Element​

Befüllen Sie die Klasse des Feed-Elements. Beispiel:

namespace App\Feeds\Items;

use DragonCode\LaravelFeed\Feeds\Items\FeedItem;

/** @property-read \App\Models\User $model */
class UserFeedItem extends FeedItem
{
public function toArray(): array
{
return [
'name' => $this->model->name,
'email' => $this->model->email,
];
}
}
Optionale Werte​

Geben Sie eine Instanz von DragonCode\LaravelFeed\Data\OptionalData als Wert zurück, um ein Feld auszulassen, wenn sein Wert nicht verfügbar ist:

namespace App\Feeds\Items;

use DragonCode\LaravelFeed\Data\OptionalData;
use DragonCode\LaravelFeed\Feeds\Items\FeedItem;

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

'cityId' => $this->model->city?->id ?? new OptionalData,

'createdAt' => $this->model->created_at,
'updatedAt' => $this->model->updated_at ?? new OptionalData,
];
}
}

Optionale Felder werden aus JSON- und JSON-Lines-Objekten sowie aus XML- und RSS-Elementen entfernt. Dies gilt auch für regulär verschachtelte Felder. CSV behält die Spaltenposition bei und schreibt ein leeres Feld.

Wenn Ihre Anwendung Spatie Laravel Data verwendet, können Sie stattdessen Spatie\LaravelData\Optional zurückgeben. Beide Klassen für optionale Werte werden automatisch verarbeitet.

use Spatie\LaravelData\Optional;

'updatedAt' => $this->model->updated_at ?? Optional::create(),

Separate Ausgabedateien​

Separate Dateien für unterschiedliche fachliche Bedingungen zu erzeugen, ist ein fortgeschrittenes Ausgabeszenario. Lesen Sie den Leitfaden zu separaten Ausgabedateien und verwenden Sie anschließend das Rezept für mehrere zielbezogene Feed-Dateien als vollständiges Beispiel.

Dateiformat​

Tipp

Die verfügbaren Formate finden Sie auf der Seite Unterstützte Formate.

Sie können Feeds in verschiedenen Formaten erzeugen. Eine Feed-Klasse kann nur korrekt in das Format exportiert werden, für das sie vorgesehen ist. Der Grund dafür sind Direktiven und weitere formatspezifische Besonderheiten.

Überschreiben Sie einfach die Eigenschaft $format in der Feed-Klasse, um das gewünschte Format festzulegen:

namespace App\Feeds;

use DragonCode\LaravelFeed\Enums\FeedFormatEnum;
use DragonCode\LaravelFeed\Feeds\Feed;
use Illuminate\Database\Eloquent\Builder;

class UserFeed extends Feed
{
protected FeedFormatEnum $format = FeedFormatEnum::Json;

public function builder(): Builder
{
//
}
}

Siehe auch​