跳到主要内容

Feed 与数据

核心 API 将数据源、Feed 项映射、Feed 级元数据、输出结构和生成结果分开处理。

Feed

DragonCode\LaravelFeed\Feeds\Feed 是导出的基类。实现 builder(),并且只覆盖 Feed 所需的输出钩子。

abstract public function builder(): Builder
方法默认值契约
builder(): Builder抽象方法返回用作数据源的 Eloquent 查询。
item(Model $model): FeedItem新的基础 FeedItem将一个模型映射为输出项。
transformers(): array[]前置该 Feed 使用的转换器类名。
chunkSize(): int1000数据库查询分块大小。
perFile(): int0每个文件的记录数。零表示不按数量拆分。
maxFiles(): int0输出文件的最大数量。零表示不限制。
header(): stringXML/RSS 使用 XML 声明写入根元素和 Feed 项之前的内容。
footer(): string空字符串写入根元素和 Feed 项之后的内容。
root(): ElementData从类名派生的元素名定义根元素及其属性。
info(): FeedInfo空的 FeedInfo定义 Feed 级信息。
filename(): string从类名派生的文件名返回相对于磁盘的输出文件名。
path($suffix): string适配器解析的路径返回本地路径或适配器解析的路径。
storagePath($suffix): string相对于磁盘的文件名返回存储操作使用的路径。
storage(): FilesystemAdapterpublic 磁盘解析并验证 Laravel 文件系统磁盘。
format(): FeedFormatEnumXml返回配置的输出格式。

Feed 使用 Laravel 的 ConditionableMacroable

Feed 目标

DragonCode\LaravelFeed\Feeds\FeedTarget 标识一个独立生成的输出。其构造函数接受非空字符串键和可选参数数组:

public function __construct(public readonly string $key, public readonly array $parameters = [])

需要目标的 Feed 类应实现 DragonCode\LaravelFeed\Contracts\HasFeedTargets。可选的 DragonCode\LaravelFeed\Concerns\InteractsWithFeedTargets trait 实现 forTarget()target();Feed 类负责发现目标:

方法契约
targets(): iterable当命令或调度任务生成全部目标时,惰性返回所有可用的 FeedTarget
findTarget(string $key): ?FeedTarget直接解析一个具有相同键的显式命令目标,找不到时返回 null
forTarget(FeedTarget $target): static返回配置后的克隆,并重置缓存的文件名。
target(): FeedTarget返回已配置的目标;未设置目标时抛出 LogicException

构造函数会拒绝空键和仅含空白字符的键,但不会规范化或清理其他值。目标参数对软件包不透明,并会作为队列任务快照进行序列化。目标键用于标识目标,因此必须稳定且在 Feed 类内唯一。请参阅独立输出文件设置命令目标选择

FeedItem 与 FeedInfo

FeedItem 接收当前 Eloquent 模型。其默认行为如下:

  • name() 返回 kebab case 格式的模型类基本名称;
  • attributes() 返回空数组;
  • toArray() 返回模型数组。

FeedInfo::toArray() 返回空数组。这两个类都使用 ConditionableMacroable;输出需要显式结构时,请继承它们。

ElementData

ElementData 是一个只读对象,具有三个构造函数属性:

属性类型默认值
name?stringnull
attributesarray[]
beforeInfobooltrue

name 设为 null 或空字符串可隐藏根元素。将 beforeInfo 设为 false 可在根元素之前写入 Feed 信息。

生成结果

GeneratorService::feed() 返回 GenerationResultData。其只读 paths 属性按输出顺序包含已发布文件。其只读 records 属性将每个路径映射到写入该文件的记录数。

编程式生成和注册方法列在运行时服务与契约中。

FeedFormatEnum

枚举项
Xmlxml
Jsonjson
JsonLinesjsonl
Csvcsv
Rssrss

另请参阅