事件与异常
使用生命周期事件与应用集成,并在能够处理失败的边界使用异常类型进行恢复。
生命周期事件
| 事件 | 公共数据 | 分发时机 |
|---|---|---|
FeedStartingEvent | feed、target | 存储和路径预检完成后、解析转换器和开始暂存之前。 |
FeedFinishedEvent | feed、target、path、paths | 所有生成文件成功发布之后。 |
对于目标生成,$target 包含目标键;对于普通 Feed,其值为 null。FeedFinishedEvent::$paths 按顺序包含所有已发布路径。为保持兼容性而保留的 $path 始终包含第一个路径。
输入与查找失败
| 异常 | 含义 |
|---|---|
InvalidFeedArgumentException | 控制台 Feed ID 无效。 |
FeedNotFoundException | 请求的 Feed ID 没有对应注册记录。 |
InvalidExpressionException | 调度表达式无效。 |
UnknownFeedClassException | 无法解析配置的 Feed 类。 |
UnexpectedClassException | 解析出的类不符合预期契约。 |
目标选择使用 SPL 异常。提供 --target 时,如果未提供 Feed 注册 ID、目标键为空,或者所选 Feed 未实现 HasFeedTargets,feed:generate 会抛出 InvalidArgumentException。当 findTarget() 返回 null 时,会抛出 UnexpectedValueException。
序列化与存储失败
| 异常 | 含义 |
|---|---|
InvalidCsvRowException | CSV 行不符合已建立的列结构。 |
InvalidCsvValueException | CSV 字段无法序列化为标量值。 |
InvalidXmlCDataException | CDATA 值无效。 |
InvalidXmlFragmentException | 原始 XML 片段无效。 |
UnsupportedStorageDiskException | 所选 Laravel 磁盘无法解析为 FilesystemAdapter。 |
OpenFeedException | 无法打开草稿输出资源。 |
WriteFeedException | 无法写入完整输出。 |
CloseFeedException | 无法关闭输出资源。 |
ResourceMetaException | 所需的流元数据不可用。 |
FeedGenerationException | 指定 Feed 类生成失败。 |
FeedGenerationException::getFeed() 返回 Feed 类。getFeedTarget() 为目标生成返回目标键,为普通 Feed 返回 null。可通过 getPrevious() 访问原始异常。
只在应用能够添加恢复逻辑或面向用户的上下文时捕获异常。无法恢复的生成失败应交给 Laravel 报告。