跳到主要内容

事件与异常

使用生命周期事件与应用集成,并在能够处理失败的边界使用异常类型进行恢复。

生命周期事件

事件公共数据分发时机
FeedStartingEventfeedtarget存储和路径预检完成后、解析转换器和开始暂存之前。
FeedFinishedEventfeedtargetpathpaths所有生成文件成功发布之后。

对于目标生成,$target 包含目标键;对于普通 Feed,其值为 nullFeedFinishedEvent::$paths 按顺序包含所有已发布路径。为保持兼容性而保留的 $path 始终包含第一个路径。

输入与查找失败

异常含义
InvalidFeedArgumentException控制台 Feed ID 无效。
FeedNotFoundException请求的 Feed ID 没有对应注册记录。
InvalidExpressionException调度表达式无效。
UnknownFeedClassException无法解析配置的 Feed 类。
UnexpectedClassException解析出的类不符合预期契约。

目标选择使用 SPL 异常。提供 --target 时,如果未提供 Feed 注册 ID、目标键为空,或者所选 Feed 未实现 HasFeedTargetsfeed:generate 会抛出 InvalidArgumentException。当 findTarget() 返回 null 时,会抛出 UnexpectedValueException

序列化与存储失败

异常含义
InvalidCsvRowExceptionCSV 行不符合已建立的列结构。
InvalidCsvValueExceptionCSV 字段无法序列化为标量值。
InvalidXmlCDataExceptionCDATA 值无效。
InvalidXmlFragmentException原始 XML 片段无效。
UnsupportedStorageDiskException所选 Laravel 磁盘无法解析为 FilesystemAdapter
OpenFeedException无法打开草稿输出资源。
WriteFeedException无法写入完整输出。
CloseFeedException无法关闭输出资源。
ResourceMetaException所需的流元数据不可用。
FeedGenerationException指定 Feed 类生成失败。

FeedGenerationException::getFeed() 返回 Feed 类。getFeedTarget() 为目标生成返回目标键,为普通 Feed 返回 null。可通过 getPrevious() 访问原始异常。

只在应用能够添加恢复逻辑或面向用户的上下文时捕获异常。无法恢复的生成失败应交给 Laravel 报告。

另请参阅