Найти текущие настройки подключения к базе данных Doctrine в symfony - PullRequest
12 голосов
/ 16 мая 2011

Мне нужно знать имя базы данных и имя сервера базы данных внутри проекта Symfony.Как получить программный доступ к текущим настройкам соединения с базой данных в Symfony (используя Doctrine)?

Ответы [ 5 ]

23 голосов
/ 22 октября 2014

Предполагается, что EntityManager имеет вид $this->em

Получить имя базы данных Doctrine от Symfony2:

$this->em->getConnection()->getDatabase();

Получить имя хоста Doctrine (имя сервера) из Symfony2:

$this->em->getConnection()->getHost();

Существует множество других параметров, к которым можно получить доступ из соединения, таких как username, port и password.См. класс соединения для получения дополнительной информации

6 голосов
/ 16 мая 2011

например:

foreach(Doctrine_Manager::getInstance()->getConnections() as $connection){
  $conn = $connection->getOptions();
  preg_match('/host=(.*);/', $conn['dsn'], $host);
  var_dump($host);
}
2 голосов
/ 13 апреля 2012

dbname в dsn для конкретного выражения:

databases.yml

all:
  conexion1:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql:host=localhost;dbname=basegestion1'
      username: miusuario
      password: ********
  conexion2:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql:host=localhost;dbname=baseestadisticas1'
      username: miusuario
      password: ********

В действии:

$mConexion1Options = Doctrine_Manager::getInstance()->getConnection('conexion1')->getOptions();
preg_match('/dbname=(.*)/', $mConexion1Options['dsn'], $mDbConexion1);

Тогда имя базы данных:

echo $mDbConexion1[1]; //basegestion1
1 голос
/ 13 февраля 2013

Используйте этот код:

$myConnection           = Doctrine_Manager::getInstance()->getConnection('doctrine')->getOptions();
$dsnInfo                = $this->parseDsn($myConnection['dsn']);
$settings               = array();
$settings['dbUser']     = (string) $myConnection["username"];
$settings['dbPassword'] = (string) $myConnection["password"];
$settings['dbHost']     = (string) $dsnInfo["host"];
$settings['dbName']     = (string) $dsnInfo['dbname'];


private function parseDsn ($dsn)
{
  $dsnArray            = array();
  $dsnArray['phptype'] = substr($dsn, 0, strpos($dsn, ':'));
  preg_match('/dbname  = (\w+)/', $dsn, $dbname);
  $dsnArray['dbname']  = $dbname[1];
  preg_match('/host    = (\w+)/', $dsn, $host);
  $dsnArray['host']    = $host[1];

  return $dsnArray;
}
0 голосов
/ 06 ноября 2014

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

$conn = Doctrine_Manager::getInstance()->getConnection('doctrine')->getOptions();

$dns_array = split(';', $conn['dsn']);
preg_match('/host=(.*);/', $dns_array, $dbhost);
preg_match('/dbname=(.*)/', $dns_array, $dbname);

$dbname = $dbname;
$dbhost = $dbhost;
$dbuser = $conn['username'];
$dbpass = $conn['password']; 

Обновлено

Как Function split() is deprecated, так что здесь рекомендуется.

$dns_array = explode(';', $conn['dsn']);
preg_match('/host=(.*)/', $dns_array[0], $dbhost);
preg_match('/dbname=(.*)/', $dns_array[2], $dbname);

$dbhost = $dbhost[1];
$dbname = $dbname[1];
$dbuser = $conn['username'];
$dbpass = $conn['password'];
...