Как получить экземпляр Zend \ Db \ Adapter из модели? (ZF2)

Я создаю абстрактные модели для управления объектами базы данных. У меня уже есть EntityAbstract , EntitySetAbstract и модели ManagerAbstract . В моей модели ManagerAbstract мне нужен экземпляр Zend/Db/Adapter , чтобы создать Zend\Db\TableGateway .

Как я могу вытащить основной экземпляр адаптера в свой ManagerAbstract ? В ZF1 я мог бы добиться этого с помощью Zend_Registry.

Если это неправильный способ сделать что-то в ZF2, я хотел бы услышать правильный путь к подобным вещам.

Благодаря!

Solutions Collecting From Web of "Как получить экземпляр Zend \ Db \ Adapter из модели? (ZF2)"

Используйте контейнер для инъекций зависимостей, Zend\Di Проект ZfcUser делает это, если вы хотите сориентироваться в каком-то рабочем коде.

Альтернативно, базовый подход – это что-то вроде этого (код непроверен!):

Во-первых: настройте DI для ввода информации о подключении к базе данных:

конфиг / автозагрузка / local.config.php:

 <?php return array( 'di' => array( 'instance' => array( 'Zend\Db\Adapter\Adapter' => array( 'parameters' => array( 'driver' => 'Zend\Db\Adapter\Driver\Pdo\Pdo', ), ), 'Zend\Db\Adapter\Driver\Pdo\Pdo' => array( 'parameters' => array( 'connection' => 'Zend\Db\Adapter\Driver\Pdo\Connection', ), ), 'Zend\Db\Adapter\Driver\Pdo\Connection' => array( 'parameters' => array( 'connectionInfo' => array( 'dsn' => "mysql:dbname=mydatabasename;host=localhost", 'username' => 'myusername', 'password' => 'mypassword', 'driver_options' => array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''), ), ), ), ), ), ); 

Во-вторых, в файле module.config.php вашего модуля module.config.php адаптер в устройство отображения:

модуль / My / Config / module.config.php:

 <?php return array( 'di' => array( // some config info... 'My\Model\ManagerAbstract' => array( 'parameters' => array( 'adapter' => 'Zend\Db\Adapter\Adapter', ), ), // more config info... ) ); 

Наконец, убедитесь, что ваш класс ManagerAbstract может получить инъекцию:

модуль / My / SRC / My / Model / ManagerAbstract.php:

 <?php namespace My\Model; use Zend\Db\Adapter\Adapter; use Zend\Db\Adapter\AdapterAwareInterface; abstract class ManagerAbstract implements AdapterAwareInterface { /** * @var Zend\Db\Adapter\Adapter */ protected $adapter; // some code public function setDbAdapter(Adapter $adapter) { $this->adapter = $adapter; } // some more code } 

Обратите внимание, что для использования какого-либо подкласса вам необходимо получить его через DIC или ввести в службу картографа, а затем ввести службу в контроллер (или другую службу), где вы хотите его использовать.