第一個ZF2應用程序,到達那裏,但我認爲在依賴注入和ServiceManager方面仍然缺少一兩個想法。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
只是一個觀察,您可以用'\ Zend的\ DB \適配器\ AdapterAwareTrait'添加'$保護和adapter''公共功能setDbAdapter'上您的課。 –
謝謝德里克。我還沒有真正給出php特性很長時間,主要是因爲我仍然支持運行在較老的php版本中的各種平臺,但它看起來像我需要爲新項目爭取我的頭,似乎他們可以節省很多的鍋爐板碼。 :wq – familymangreg