我正在学习 PHP 的 Laminas 框架,并扩展官方文档中提供的相册教程的功能。我已成功将登录和注册等功能添加到相册页面。最近,我开始集成 Doctrine 来进行数据库存储和对象映射。
在合并 Doctrine 之前,一切都运行顺利。但是,我在 Composer 依赖项中遇到了与“laminas\di”包相关的问题,这导致了 Doctrine 的存储问题。我收到的错误消息是:
无法创建 DoctrineModule\Cache\LaminasStorageCache”。原因:无法解析 DoctrineModule\Cache\LaminasStorageCache 类中 Laminas\Cache\Storage\StorageInterface 类型的参数“storage”的值(请求为 DoctrineModule\Cache\LaminasStorageCache)。
任何有关如何解决此“Laminas\Authentication\AuthenticationService”错误的见解或指导将不胜感激。
为了解决这个问题,我决定从我的 Composer 依赖项中删除“laminas/laminas-di”包。虽然这解决了 Doctrine 的存储问题,但我现在面临新的错误消息:
无法将服务“Laminas\Authentication\AuthenticationService”解析为工厂;您确定您在配置过程中提供了它吗?
值得注意的是,自从我通过 Composer 将其删除后,我的项目中对“laminas/laminas-di”没有任何显式依赖,这就是为什么与“laminas\di”相关的错误令人费解。 这是我的 module.config.php 如果有帮助的话
return [
'Laminas\Cache',
'Laminas\Mvc\Plugin\FlashMessenger',
'Laminas\Paginator',
'Laminas\Session',
'Laminas\Navigation',
'Laminas\Form',
'Laminas\I18n',
'Laminas\InputFilter',
'Laminas\Filter',
'Laminas\Hydrator',
'Laminas\Db',
'Laminas\Router',
'Laminas\Validator',
'Laminas\Diactoros',
'DoctrineModule',
'Laminas\Cache\Storage\Adapter\Filesystem',
'Laminas\Cache\Storage\Adapter\Memory',
'DoctrineORMModule',
'Application',
'Us',
'Album',
'Blog',
];
由于 laminas-di 在应用程序中注册为模块,因此通过抽象工厂进行了某种自动装配,这是因为我没有为其定义工厂。奇怪的是,当我不记得调用它时,lamians\di 已经存在于我的项目中。 简而言之,我只需向我的 Laminas\Authentication\AuthinticationService 添加一个工厂,其简化如下所示:
'service_manager' => [
'factories' => [
AuthenticationService::class => function ($container) {
$authService = new AuthenticationService();
return $authService;
},
],
],