Zend Framework — Db Adapter в конструкторе является нулевым

ZF версия: 1.11.2

Я хочу создать абстрактный класс, который содержит мой адаптер БД. Упрощенно это выглядит так:

<?php
class Application_Model_DbTable_Abstract extends Zend_Db_Table_Abstract
{
protected $_dbAdapter = null;

/**
* @return null
*/
public function getDbAdapter()
{
return $this->_dbAdapter;
}

/**
* @param null $dbAdapter
*/
public function setDbAdapter($dbAdapter)
{
$this->_dbAdapter = $dbAdapter;
}

public function __construct()
{
\Zend_Debug::dump($this->getAdapter(), 'Datei: ' . __FILE__ . '<br/>Zeile: ' . __LINE__, true); die;
}
}

Но мой дамп возвращает ноль. В базовом классе модели (который происходит от Zend_D b_Table_Abstract) тот же дамп возвращает объект Zend_Db_Adapter_Pdo_Mysql. Зачем?

0

Решение

Я немного посмотрел на исходный код Zend DB, чтобы освежить мою память. Если вы измените свой конструктор на это:

public function __construct($config = array())
{
parent::__construct($config);

\Zend_Debug::dump($this->getAdapter(), 'Datei: ' . __FILE__ . '<br/>Zeile: ' . __LINE__, true); die;
}

Это должно работать больше, как вы ожидаете.

Отвечая на вопрос из вашего комментария: getAdapter() метод Zend_Db_Table_Abstract просто возвращает все, что есть в переменной адаптера БД. Это ничего не делает со значением по умолчанию. Кроме того, поскольку ваш класс переопределяет этот метод, вместо него будет использоваться ваша версия.

Конструктор в Zend_Db_Table_Abstract class установит значение по умолчанию, если оно не было предоставлено, поэтому вызов родительского конструктора, как в моем примере, должен гарантировать, что установлен адаптер по умолчанию.

Кроме того, ZF1 — это конец жизни. Вы не должны использовать его для новых приложений и должны планировать миграцию для текущих.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]