Мне нужно знать имя базы данных и имя сервера базы данных внутри проекта symfony. Как можно запрограммировать доступ к текущим настройкам подключения базы данных в symfony (используя Doctrine)?
Найти текущие настройки подключения базы данных Doctrine в symfony
Ответ 1
например:
foreach(Doctrine_Manager::getInstance()->getConnections() as $connection){
$conn = $connection->getOptions();
preg_match('/host=(.*);/', $conn['dsn'], $host);
var_dump($host);
}
Ответ 2
Предполагая, что у EntityManager есть $this->em
Получить имя базы данных Doctrine из Symfony2:
$this->em->getConnection()->getDatabase();
Получить имя хоста Doctrine (имя сервера) из Symfony2:
$this->em->getConnection()->getHost();
Есть много других параметров, к которым вы можете получить доступ из таких соединений, как username
, port
и password
. См. класс подключения для получения дополнительной информации
Ответ 3
Имя 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);
Затем имя dbname:
echo $mDbConexion1[1]; //basegestion1
Ответ 4
Используйте этот код:
$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;
}
Ответ 5
Попробуйте этот
$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'];