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(): int | 1000 | 数据库查询分块大小。 |
perFile(): int | 0 | 每个文件的记录数。零表示不按数量拆分。 |
maxFiles(): int | 0 | 输出文件的最大数量。零表示不限制。 |
header(): string | XML/RSS 使用 XML 声明 | 写入根元素和 Feed 项之前的内容。 |
footer(): string | 空字符串 | 写入根元素和 Feed 项之后的内容。 |
root(): ElementData | 从类名派生的元素名 | 定义根元素及其属性。 |
info(): FeedInfo | 空的 FeedInfo | 定义 Feed 级信息。 |
filename(): string | 从类名派生的文件名 | 返回相对于磁盘的输出文件名。 |
path($suffix): string | 适配器解析的路径 | 返回本地路径或适配器解析的路径。 |
storagePath($suffix): string | 相对于磁盘的文件名 | 返回存储操作使用的路径。 |
storage(): FilesystemAdapter | public 磁盘 | 解析并验证 Laravel 文件系统磁盘。 |
format(): FeedFormatEnum | Xml | 返回配置的输出格式。 |
Feed 使用 Laravel 的 Conditionable 和 Macroable。
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() 返回空数组。这两个类都使用 Conditionable 和 Macroable;输出需要显式结构时,请继承它们。
ElementData
ElementData 是一个只读对象,具有三个构造函数属性:
| 属性 | 类型 | 默认值 |
|---|---|---|
name | ?string | null |
attributes | array | [] |
beforeInfo | bool | true |
将 name 设为 null 或空字符串可隐藏根元素。将 beforeInfo 设为 false 可在根元素之前写入 Feed 信息。
生成结果
GeneratorService::feed() 返回 GenerationResultData。其只读 paths 属性按输出顺序包含已发布文件。其只读 records 属性将每个路径映射到写入该文件的记录数。
编程式生成和注册方法列在运行时服务与契约中。
FeedFormatEnum
| 枚举项 | 值 |
|---|---|
Xml | xml |
Json | json |
JsonLines | jsonl |
Csv | csv |
Rss | rss |