我想使用doctrine db config访问doctrine中的DBAL层,我在doctrine db file config中有以下配置: database.local.php
return array(
'doctrine' => array(
'connection' => array(
'orm_default' => array(
'driverClass' => 'Doctrine\DBAL\Driver\PDOPgSql\Driver',
'params' => array(
'host' => 'localhost',
'port' => '5432',
'user' => 'postgres',
'password' => '123456',
'dbname' => 'test'
)
)
)
)
);
并在我的控制器中 IndexController.php
use Doctrine\DBAL\DriverManager;
public function testAction(){
$conn = DriverManager::getConnection($params, $config);
}
我想在getConnection函数中使用上面的db config,这可能吗?
答案 0 :(得分:2)
如果您在local.php
中配置了数据库配置,那么为什么不通过EntityManager
访问它?就像这样:
public function testAction(){
$em = ->getServiceLocator()
->get('Doctrine\ORM\EntityManager');
$conn = $em->getConnection();
}
如果您希望通过DriverManager
:
$config = new \Doctrine\DBAL\Configuration();
$connectionParams = array(
'host' => 'localhost',
'port' => '5432',
'user' => 'postgres',
'password' => '123456',
'dbname' => 'test'
'driver' => 'pdo_pgsql',
);
$conn = DriverManager::getConnection($connectionParams, $config);
编辑:
您还可以使用Doctrine提供的已注册服务名称直接获取Doctrine\DBAL\Connection
的实例,并使用您的实际数据库配置:
$conn = $this->getServiceLocator()->get('doctrine.connection.orm_default');
作为DriverManager::getConnection()
方法,这将返回一个包含底层驱动程序连接的Doctrine\DBAL\Connection
。
希望这有帮助。
答案 1 :(得分:1)
不确定
首先,您应该使用ServiceLocator
ServiceLocator被自动注入到实现\ Zend \ ServiceManager \ ServiceLocatorAwareInterface
的类中您的zf2控制器的AbstractActionController已实现此接口。
要使用类(通过示例建模),您应该声明实现和两个由interface,setServiceLocator和getServiceLocator设计的方法。
<?php
namespace Security\Repository;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
class Repository implements ServiceLocatorAwareInterface
{
protected $serviceLocator;
public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
{
$this->serviceLocator = $serviceLocator;
}
public function getServiceLocator()
{
return $this->serviceLocator;
}
}
使用ServiceLocator很容易在ZF2上做任何事情。尝试了解它是如何工作以获得zf2的全部功能。
$configArray = $this->getServiceLocator()->get('config');
$config = new \Doctrine\DBAL\Configuration();
$connectionParams = $configArray['doctrine']['connection']['orm_default']['params']
$conn = DriverManager::getConnection($connectionParams, $config);