Zend Framework 2 - DI и необходимость вставлять адаптер таблицы в таблицы ... утомительно? - PullRequest
9 голосов
/ 15 ноября 2011

Я только что прочитал учебное пособие Роба Аллена по akrabat ZF2 (http://akrabat.com/wp-content/uploads/Getting-Started-with-Zend-Framework-2.pdf) о том, как внедрить зависимости в ваши вещи, такие как вставка адаптера таблицы в классы таблицы.

Кажется, вот как я должен это сделать:

        array(
            'Application\Model\DbTable\UserTable',
        ) => array(
            'parameters' => array(
                'config' => 'Zend\Db\Adapter\PdoMysql',
            )
        ),

        array(
            'Application\Model\DbTable\UserProfileTable',
        ) => array(
            'parameters' => array(
                'config' => 'Zend\Db\Adapter\PdoMysql',
            )
        ),

Хорошо, это довольно круто, но у меня есть около 84 таблиц, поэтому мне нужно добавить каждую из них и сказать, что я хочу, чтобы PdoMySQL внедрил их все. Есть ли правильный способ сделать это, например, указав всю мою папку DbTable? Даже это не работает:

        array(
            'Application\Model\DbTable\UserTable',
            'Application\Model\DbTable\UserProfileTable'
        ) => array(
            'parameters' => array(
                'config' => 'Zend\Db\Adapter\PdoMysql',
            )
        ),

Кто-нибудь еще делал это и нашел лучшее решение?

Спасибо, Дом

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Ваш вопрос хороший, и я согласен, в этом сценарии внедрение зависимости НЕ имеет смысла. Я еще не просматривал API ZF2, полностью ли они отказались от возможности привязывать адаптер на уровне соединения, а не на уровне таблицы?

В моем классе базы данных я использую файл yaml для хранения настроек соединения; имя пользователя, пароль, адаптер и т. д. Я сделал это в формате, который можно передать прямо в Zend_Config, а затем передать в класс Zend_Db.

// Entry in connection.yml
database:
  adapter: Pdo_Mysql
  params:
    host:     myhost
    dbname:   mydatabase
    username: myusername
    password: mypassword

// Parse yaml file to get above snippet in an array ($dbConnectionparams)

$config = new Zend_Config($dbConnectionParams);

$dbo = Zend_Db::factory($config->database);

Теперь, если мне когда-либо понадобится сменить адаптер для подключения к базе данных, мне нужно изменить его только в одном месте, в файле connection.yml.

Кроме того, я считаю, что вы можете хранить данные этого типа в других форматах (xml и т. Д.).

0 голосов
/ 24 ноября 2012

Вы должны реализовать Zend \ Db \ Adapter \ AdapterAwareInterface в ваших классах моделей и запросить их через диспетчер служб в ваших контроллерах. Смотрите подробности в моем блоге: http://cmyker.blogspot.com/2012/11/zend-framework-2-model-database-adapter.html

...