gpt4 book ai didi

php - ZF2 - ServiceManager 和 'aware' 接口(interface)

转载 作者:行者123 更新时间:2023-12-04 05:19:35 27 4
gpt4 key购买 nike

第一个 ZF2 应用程序,到达那里,但我认为在依赖注入(inject)和 ServiceManager 方面仍然缺少一两个想法。

目前我在编写一个新的数据库网关类时遇到了一个特殊问题。我不会注入(inject)数据库适配器,所以我实现了 AdapterAwareInterface。但是 setDbAdapter 方法从未在我的类里面被调用过。我想知道是否有人会好心地查看我的代码并提出可能出了什么问题(或者我错过了什么!)。

所以,这是我实现 AdapterAwareInterface 的类。

<?php
namespace Foo\Database;
use Zend\Db\Adapter\Adapter;
use Zend\Db\Adapter\AdapterAwareInterface;
use Zend\Log\LoggerAwareInterface;
use Zend\Log\LoggerInterface;


class Gateway implements AdapterAwareInterface, LoggerAwareInterface
{
protected $logger = NULL;
protected $db = NULL;

public function setDbAdapter(Adapter $adapter)
{
$this->db = $adapter;
}

public function setLogger(LoggerInterface $logger)
{
$this->logger = $logger;
}

这是我的模块文件的摘录,显示了我如何配置我的服务管理器:
    public function getServiceConfig()
{
return array(
'factories' => array(
....
),
'invokables' => array(
'FooDatabaseGateway' => 'Foo\Database\Gateway',
),
'abstract_factories' => array(
'AbstractFeedParserFactory' => 'Bookmakers\Odds\Feeds\AbstractFeedParserFactory',
),
);
}

这就是我测试的方式:
gateway = $this->getServiceLocator()->get('FooDatabaseGateway');

这是我的全局配置的一部分:
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=kickoff_manager;host=localhost',
'username' => '****',
'password' => '****',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter'
=> 'Zend\Db\Adapter\AdapterServiceFactory',
),
),
);

非常感谢您提供的任何帮助。

:wq

最佳答案

好吧,今天早上对这个问题有一双新的眼睛。我认为这是写答案..至少可以说它对我有用。如果有人想提出一种完全不同的更好的方法,那么请这样做:-)。

所以缺少的一点是使用 initializer在我的服务管理器配置中调用 setDbAdapter在任何实现 AdapterAwareInterface 的类实例上运行.所以在数组中我从 getServiceConfig 返回在我的Module.php文件,我添加了以下条目:

public function getServiceConfig() {
return array(
'initializers' => array(
'db' => function($service, $sm)
{
if ($service instanceof AdapterAwareInterface)
{
$service->setDbAdapter($sm->get('Zend\Db\Adapter\Adapter'));
}
}....

我认为我在学习 ZF2 时缺少的是有很多构建 block 可以使用,但你必须自己将它们组合在一起。

事情看起来不错,我很喜欢这个框架,但是还有很多东西要学,我仍然不相信使用服务器管理器注入(inject)而不是好的旧构造函数注入(inject)!

:wq

关于php - ZF2 - ServiceManager 和 'aware' 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13807884/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com