如何从 servicemanager 中获取 dbadapter
How to get dbadapter out of the servicemanager
我尝试使用以下语句获取数据库适配器:
$dbAdapter = $this->getServiceLocator()->get('db');
我收到一个错误
"A plugin by the name "getServiceLocator" 在插件管理器中找不到 Zend\Mvc\Controller\PluginManager"
在我的 module.php 中搜索时(这是要查看的正确文件吗?)我认为这可能是一个理解问题。我阅读了 Ralph Eggert 的文章和 zend 文档。我知道我可以通过 servicemanager 获取任何配置信息。但是我找到的所有文档都是针对 Zend2 的。
所以在我的 module.php 中,我看到了这样的内容(片段):
public function getServiceConfig()
{
return [
'factories' => [
Model\ImportTable::class => function($container) {
$tableGateway = $container->get(Model\ImportTableGateway::class);
return new Model\ImportTable($tableGateway);
},
Model\ImportTableGateway::class => function ($container) {
$dbAdapter = $container->get(AdapterInterface::class);
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Model\Import());
return new TableGateway('t_dcl', $dbAdapter, null, $resultSetPrototype);
},
Model\DclimportTable::class => function($container) {
$tableGateway = $container->get(Model\DclimportTableGateway::class);
return new Model\DclimportTable($tableGateway);
},
Model\DclimportTableGateway::class => function ($container) {
$dbAdapter = $container->get(AdapterInterface::class);
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Model\Dclimport());
return new TableGateway('t_dcl_import', $dbAdapter, null, $resultSetPrototype);
},
在那里我看到了一个变量$dbAdapter,但是我怎样才能得到这个变量呢?上面的错误可能是因为我现在用的是ZEND3?这种方法被弃用了吗?我找不到任何迁移信息。
无论如何,有人可以向我解释一下,如何从 module.php 中获取这些密钥,并在这种情况下在那里创建自己的工厂吗?我知道这是一个非常基本的问题,但我认为如果我不做对,它总会再次超越我。
控制器中的服务定位器已在 2.7 版中弃用并在 3.0 版中删除。
修复您的代码:
- 查找您调用 getServiceLocator() 的所有情况,并确定它们检索的服务。
- 更新您的控制器以通过构造函数接受这些服务。
- 如果您还没有,请为您的控制器创建一个工厂 class。
- 在工厂中,拉取相应的服务并将它们传递给控制器的构造函数。
可以在 migration docs 中找到更详细的信息。
我尝试使用以下语句获取数据库适配器:
$dbAdapter = $this->getServiceLocator()->get('db');
我收到一个错误 "A plugin by the name "getServiceLocator" 在插件管理器中找不到 Zend\Mvc\Controller\PluginManager"
在我的 module.php 中搜索时(这是要查看的正确文件吗?)我认为这可能是一个理解问题。我阅读了 Ralph Eggert 的文章和 zend 文档。我知道我可以通过 servicemanager 获取任何配置信息。但是我找到的所有文档都是针对 Zend2 的。
所以在我的 module.php 中,我看到了这样的内容(片段):
public function getServiceConfig()
{
return [
'factories' => [
Model\ImportTable::class => function($container) {
$tableGateway = $container->get(Model\ImportTableGateway::class);
return new Model\ImportTable($tableGateway);
},
Model\ImportTableGateway::class => function ($container) {
$dbAdapter = $container->get(AdapterInterface::class);
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Model\Import());
return new TableGateway('t_dcl', $dbAdapter, null, $resultSetPrototype);
},
Model\DclimportTable::class => function($container) {
$tableGateway = $container->get(Model\DclimportTableGateway::class);
return new Model\DclimportTable($tableGateway);
},
Model\DclimportTableGateway::class => function ($container) {
$dbAdapter = $container->get(AdapterInterface::class);
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Model\Dclimport());
return new TableGateway('t_dcl_import', $dbAdapter, null, $resultSetPrototype);
},
在那里我看到了一个变量$dbAdapter,但是我怎样才能得到这个变量呢?上面的错误可能是因为我现在用的是ZEND3?这种方法被弃用了吗?我找不到任何迁移信息。
无论如何,有人可以向我解释一下,如何从 module.php 中获取这些密钥,并在这种情况下在那里创建自己的工厂吗?我知道这是一个非常基本的问题,但我认为如果我不做对,它总会再次超越我。
控制器中的服务定位器已在 2.7 版中弃用并在 3.0 版中删除。
修复您的代码:
- 查找您调用 getServiceLocator() 的所有情况,并确定它们检索的服务。
- 更新您的控制器以通过构造函数接受这些服务。
- 如果您还没有,请为您的控制器创建一个工厂 class。
- 在工厂中,拉取相应的服务并将它们传递给控制器的构造函数。
可以在 migration docs 中找到更详细的信息。