Zend Expressive项目新建POST路由调用时报DeliverPackage服务无法创建错误
排查步骤
你遇到的错误为Zend Expressive服务容器无法实例化指定的Action类,按以下优先级逐一排查即可:
- 类命名空间与自动加载配置校验
确认DeliverPackage类顶部定义的命名空间完全为Domain\v1\SmartLocker\Action,再检查项目根目录composer.json的autoload配置,确认Domain目录已正确映射到对应根命名空间,修改完自动加载配置后执行composer dump-autoload生效。 - 依赖注入配置校验
需在ConfigProvider.php的getDependencies()方法中注册该Action对应的工厂,无构造依赖的场景可以直接使用反射工厂:
容器无法解析Action的构造依赖时,就会抛出类创建失败的错误。'factories' => [ \Domain\v1\SmartLocker\Action\DeliverPackage::class => \Zend\ServiceManager\Factory\InvokableFactory::class, // 如果Action有构造依赖,需替换为对应自定义工厂类,且依赖的Service也需要提前完成工厂注册 ] - 文件名与类名一致性校验
Zend Expressive对文件/类名大小写敏感,确认Action文件名完全为DeliverPackage.php,和类名大小写完全匹配,文件夹层级也和命名空间层级一一对应。 - 路由配置拼写校验
核对getRoutes()方法中路由指向的Action类名,排查是否存在拼写错误、命名空间层级写错的问题。 - 类文件语法校验
直接在命令行执行php 你的Action文件完整路径/DeliverPackage.php,查看是否存在语法报错,语法错误也会导致类无法被容器实例化。
你之前执行的清除配置缓存、修改缓存文件权限都是正确的常规操作,完成上述配置排查后可以再次删除
data/config-cache.php重启服务测试。
内容的提问来源于stack exchange,提问作者Matheus Afornali
相关产品推荐
相关产品推荐

