创建 Feed
备注
要创建 Feed 类,请使用 make:feed 控制台命令:
php artisan make:feed <name>
该命令会创建 Feed 文件,例如 app/Feeds/UserFeed.php。
该控制台命令还可以在创建 Feed 类的同时创建项类和信息类。使用 --item 和 --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
也可以使用短选项:
# 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
备注
创建 Feed 时,还会创建一个操作类或迁移,以便将它添加到数据库。
如果项目使用 Laravel Deploy Operations,则会创建操作类;否则会创建迁移类。
这是在数据库中添加和管理 Feed 信息所必需的。
填充 Feed
Feed
填充主 Feed 类。例如:
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 项
填充 Feed 项类。例如:
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,
];
}
}
可选值
当值不可用时,如需省略字段,请将 DragonCode\LaravelFeed\Data\OptionalData 实例作为该字段的值返回:
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,
];
}
}
可选字段会从 JSON 和 JSON Lines 对象以及 XML 和 RSS 元素中移除,普通嵌套字段也会被移除。CSV 会保留列位置并写入空字段。
如果应用使用 Spatie Laravel Data,也可以返回 Spatie\LaravelData\Optional。这两种可选值类都会被自动处理。
use Spatie\LaravelData\Optional;
'updatedAt' => $this->model->updated_at ?? Optional::create(),
独立输出文件
针对不同业务条件生成独立文件属于高级输出场景。请先阅读独立输出文件指南,再参照按目标生成多个 Feed 文件的示例完成配置。
文件格式
提示
可在支持的格式页面查看可用格式列表。
可以生成不同格式的 Feed。Feed 类只能正确导出为其目标格式,这是由指令和其他格式特性决定的。
要应用所需格式,只需在 Feed 类中覆盖 $format 属性:
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
{
//
}
}

