Использовать контейнер для впрыскивания, 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
файле вашего модуля, впрыснуть адаптер в картографа:
модуль/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/Модель/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 или впрыскивать картографа в службу, а затем впрыскивают-услуги e в контроллер (или другую службу), где вы хотите его использовать.
Ничего себе, спасибо за удивительный ответ! хотя, у меня все еще есть проблема, которую я не мог понять. 'Отсутствует экземпляр/объект для драйвера параметров для Zend \ Db \ Adapter \ Adapter :: __ construct' - что может быть проблемой? –
Это означает, что конфигурация DI где-то не так. Возможно, в определении Zend \ Db \ Adapter \ Adapter –