я бы использовал свой адаптер базы данных в моем шаблоне макета приложения, но я не могу этого сделать! это ошибка:
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',
),
),
);
Вы должны передать адаптер от контроллера к представлению в качестве параметра ($ dbAdapter — ваш экземпляр db-адаптера).
в вашем контроллере:
$view = new ViewModel(array(
'dbAdapter' => $dbAdapter,
));
return $view;
или вы также можете просто вернуть массив:
return array(
'dbAdapter' => $dbAdapter,
);
в представлении (макете) вы можете получить доступ к переменным следующим образом:
<?php $dbAdapter ?>
хотя я не знаю, зачем вам нужен db-адаптер в шаблоне.
Попробуй это:
<?php $dbAdapter = Zend_Db_Table_Abstract::getDefaultAdapter(); ?>