第一个 ZF2 应用程序,到达那里,但我认为在依赖注入和 ServiceManager 方面仍然缺少一两个想法。
目前我在编写一个新的数据库网关类时遇到了一个特殊问题。我不会注入数据库适配器,所以我实现了 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