Php ZF3转换器远程加载程序工厂无法解析服务
Php ZF3转换器远程加载程序工厂无法解析服务,php,zend-framework3,zend-translate,zend-servicemanager,Php,Zend Framework3,Zend Translate,Zend Servicemanager,我在使用MVCTranslator时遇到问题,数据库中存储了翻译。 我已将翻译配置为使用远程_翻译,但无法为自定义加载程序创建工厂。 我的文件如下所示: module.config.php Module.php Translator\DatabaseTranslationLoader.php Factory\DatabaseTranslationLoaderFactory.php 使用此配置,当我尝试在DatabaseTranslationLoaderFactory中检索数据库适配器时,会收到来
我在使用MVCTranslator时遇到问题,数据库中存储了翻译。
我已将翻译配置为使用远程_翻译,但无法为自定义加载程序创建工厂。 我的文件如下所示:
module.config.php Module.php Translator\DatabaseTranslationLoader.php Factory\DatabaseTranslationLoaderFactory.php 使用此配置,当我尝试在DatabaseTranslationLoaderFactory中检索数据库适配器时,会收到来自服务管理器的异常:
无法将服务“Zend\Db\Adapter\Adapter”解析为工厂;您确定在配置过程中提供了它吗
工厂似乎有一个空容器(新的ServiceManager实例?) 我做错了什么? 有人知道怎么做吗? 如有任何建议,我将不胜感激 编辑: 如上所述,这似乎是DatabaseTranslationLoaderFactory中的一个新serviceMenager实例。
当我尝试执行以下操作时会出现相同的错误:
$container->get('router')
或
首先,我看到你打电话时打错了。您可以调用变量
$contenner
。它应该是$container
$conteiner->get('Zend\Db\Adapter\Adapter')
和用于检索数据库适配器服务的使用
$container->get(Zend\Db\Adapter\AdapterInterface::class);
而不是
$container->get('Zend\Db\Adapter\Adapter')
首先,我看到你打电话时打错了。您可以调用变量
$contenner
。它应该是$container
$conteiner->get('Zend\Db\Adapter\Adapter')
和用于检索数据库适配器服务的使用
$container->get(Zend\Db\Adapter\AdapterInterface::class);
而不是
$container->get('Zend\Db\Adapter\Adapter')
经过数小时的搜索,我找到了问题的解决方案。
在Zend\I18n\Translator\Translator.php中找到了问题的解释:
从上面可以看出,默认情况下,getPluginManager使用ServiceManager的新实例创建一个新的LoaderPluginManager实例
在我的例子中,要访问DatabaseTranslationLoaderFactory中的ServiceManager,我必须首先使用setPluginManager方法,如下所示:
Module.php 我不知道这个解决方案是否正确,但它是有效的
也许它会帮助某人:)经过几个小时的搜索,我找到了解决问题的方法。
在Zend\I18n\Translator\Translator.php中找到了问题的解释:
从上面可以看出,默认情况下,getPluginManager使用ServiceManager的新实例创建一个新的LoaderPluginManager实例
在我的例子中,要访问DatabaseTranslationLoaderFactory中的ServiceManager,我必须首先使用setPluginManager方法,如下所示:
Module.php 我不知道这个解决方案是否正确,但它是有效的
也许这会对某人有所帮助:)谢谢你的评论。我已经包括了你的建议,但我仍然有同样的错误。你有什么想法吗?我的想法已经用尽了:/您的
db
配置如何?您配置了吗?是的,我已经配置了数据库的连接参数,我确信这很好,因为它在另一个工厂中使用了这些参数。一般来说,我不能在这家工厂使用任何服务。关键是,为了使这个工厂能够工作,我必须通过以下方式添加它:$translator->getPluginManager()->>setFactory(translator\DatabaseTranslationLoader::class,factory\DatabaseTranslationLoaderFactory::class)
,否则它就无法工作。也许有什么不对劲?也许我应该换一种方式?谢谢你的评论。我已经包括了你的建议,但我仍然有同样的错误。你有什么想法吗?我的想法已经用尽了:/您的db
配置如何?您配置了吗?是的,我已经配置了数据库的连接参数,我确信这很好,因为它在另一个工厂中使用了这些参数。一般来说,我不能在这家工厂使用任何服务。关键是,为了使这个工厂能够工作,我必须通过以下方式添加它:$translator->getPluginManager()->>setFactory(translator\DatabaseTranslationLoader::class,factory\DatabaseTranslationLoaderFactory::class)
,否则它就无法工作。也许有什么不对劲?也许我应该换一种方式做?
$container->get(Zend\Db\Adapter\AdapterInterface::class);
$container->get('Zend\Db\Adapter\Adapter')
public function setPluginManager(LoaderPluginManager $pluginManager)
{
$this->pluginManager = $pluginManager;
return $this;
}
public function getPluginManager()
{
if (! $this->pluginManager instanceof LoaderPluginManager) {
$this->setPluginManager(new LoaderPluginManager(new ServiceManager));
}
return $this->pluginManager;
}
namespace MyNamespace;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
class Module implements ConfigProviderInterface
{
public function getConfig()
{
return include __DIR__ . '/../config/module.config.php';
}
/*
....
...
....
*/
public function getControllerConfig()
{
return [
'factories' => [
Controller\MyController::class => function($container) {
$translator = $container->get('MvcTranslator');
// This line solved my problem
$translator->setPluginManager(new \Zend\I18n\Translator\LoaderPluginManager($container));
$translator->getPluginManager()->setFactory(Translator\DatabaseTranslationLoader::class, Factory\DatabaseTranslationLoaderFactory::class);
return new Controller\MyController(
$translator
);
},
],
];
}
}