最初の ZF2 アプリケーションはそこに到達しましたが、依存性注入と ServiceManager に関しては、まだ 1 つまたは 2 つの考えが欠けていると思います。
現在、作成中の新しいデータベース ゲートウェイ クラスに特定の問題があります。データベース アダプターを挿入しないので、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