Как включить dbadapter в представление / макет в Zend Framework 2.3?

я бы использовал свой адаптер базы данных в моем шаблоне макета приложения, но я не могу этого сделать! это ошибка:

Fatal error: Uncaught exception 'Zend\ServiceManager\Exception\ServiceNotFoundException' with message 'Zend\View\HelperPluginManager::get was unable to fetch or create an instance for getServiceLocator' in C:\Program Files (x86)\xampp\htdocs\Easyanimal\vendor\zendframework\zendframework\library\Zend\ServiceManager\ServiceManager.php:529 Stack trace: #0 C:\Program Files (x86)\xampp\htdocs\Easyanimal\vendor\zendframework\zendframework\library\Zend\ServiceManager\AbstractPluginManager.php(103): Zend\ServiceManager\ServiceManager->get('getServiceLocat...', true) #1 C:\Program Files (x86)\xampp\htdocs\Easyanimal\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php(377): Zend\ServiceManager\AbstractPluginManager->get('getServiceLocat...', NULL) #2 C:\Program Files (x86)\xampp\htdocs\Easyanimal\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php(396): Zend\View\Renderer\PhpRenderer->plugin('getServiceLocat...') #3 C:\Program Files (x86)\xampp\htdocs\Easyanimal\module\Application in C:\Program Files (x86)\xampp\htdocs\Easyanimal\vendor\zendframework\zendframework\library\Zend\ServiceManager\ServiceManager.php on line 529

я попытался добавить непосредственно в моем приложении \ view \ layout следующим образом:

 $dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter');

я попытался добавить в Application \ Module \ dbAdapter, как это:

    namespace Application\Model;

class dbAdapter
{
protected $adapter;
public function getAdapter()
{
if (!$this->adapter) {
$sm = $this->getServiceLocator();
$this->adapter = $sm->get('Zend\Db\Adapter\Adapter');
}
return $this->adapter;
}
}

и я включаю его в приложение \ просмотр \ макет

    use Application\Model\dbAdapter;

$dbAdapter = new dbAdapter();
$dbAdapter-> getAdapter();

но ошибка такова:

Fatal error: Call to undefined method Application\Model\dbAdapter::getServiceLocator() in C:\Program Files (x86)\xampp\htdocs\Easyanimal\module\Application\src\Application\Model\dbAdapter.php on line 10

это конфиг \ autoload \ global.php

 return array(
'db' => array(
'driver'         => 'Pdo',
'dsn'            => 'mysql:dbname=zf2-testdb;host=localhost',
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
),
),
);

0

Решение

Вы должны передать адаптер от контроллера к представлению в качестве параметра ($ dbAdapter — ваш экземпляр db-адаптера).

в вашем контроллере:

$view = new ViewModel(array(
'dbAdapter' => $dbAdapter,
));

return $view;

или вы также можете просто вернуть массив:

return array(
'dbAdapter' => $dbAdapter,
);

в представлении (макете) вы можете получить доступ к переменным следующим образом:

<?php $dbAdapter ?>

хотя я не знаю, зачем вам нужен db-адаптер в шаблоне.

1

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

Попробуй это:

<?php $dbAdapter = Zend_Db_Table_Abstract::getDefaultAdapter(); ?>
0

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