- PVSM.RU - https://www.pvsm.ru -
Привет, читатели!
Многие разработчики начали изучать Zend framework 2 и, скорее всего, столкнулись с проблемой использования постоянного адаптера для базы данных. Я хотел бы поделиться с вами интересной статьей, которая помогла мне решить этот вопрос.
Проблема заключается в том, чтобы получить экземпляр TableGateway непосредственно, а не через service locator.
Объект TableGateway требует настроить объект dbAdapter, переданный в шлюз конструктора.
Следующее решение поможет решить эту проблему:
1. Используем GlobalAdaperFeature в качестве статического хранилища для dbAdapter:
use ZendDbTableGatewayFeature;
$feature = new FeatureGlobalAdapterFeature();
2. Добавить метод начальной загрузки (bootstrap) в файл конфигурации модуля:
public function onBootstrap($e)
{
// set static adapter for all module table gateways
$serviceManager = $e->getApplication()->getServiceManager();
$dbAdapter = $serviceManager->get('ZendDbAdapterAdapter');
FeatureGlobalAdapterFeature::setStaticAdapter($dbAdapter);
}
3. Теперь можно получить доступ к уже загруженному dbAdapter объекта в конструкторе TableGateway:
public function __construct()
{
$this->featureSet = new FeatureFeatureSet();
$this->featureSet->addFeature(new FeatureGlobalAdapterFeature());
$this->initialize();
}
Таким образом, мы имеем dbAdapter, внедренный в шлюз (gateway) конструктора. Конечно, это не лучшая практика, но это позволяет добавить некоторую гибкость в ваше приложение, но в любом случае объект dbAdapter был создан с помощью службы локатора (service locator), но как singleton метод для всех tableGateways на уровне модуля начальной загрузки.
Автор: e_Jin
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/31250
Ссылки в тексте:
[1] Источник: http://habrahabr.ru/post/175523/
Нажмите здесь для печати.