Aprende cómo obtener fácilmente el nombre de la base de datos de una conexión de doctrina específica o actual en Symfony 1.4

En Symfony 1.4 había muchas características útiles que fueron documentadas y utilizadas por todos en aquel entonces. Al igual que muchos otros marcos de trabajo de la época, había una cadena de conexión (nombre de la fuente de datos) donde necesitaba especificar el nombre de la base de datos, la dirección y la contraseña, en el caso de Symfony 1.4, esta información se almacenaba en el archivo app/config/databases.yml bajo la llave param.dsn del nombre de la conexión:

# You can find more information about this file on the symfony website:
# http://www.symfony-project.org/reference/1_4/en/07-Databases

all:
  doctrine:
    class: sfDoctrineDatabase
    param:
      dsn:      mysql:host=localhost;dbname=mydbname
      username: root
      password: 12345

Por supuesto, esta era una forma de hacerlo, utilizando el DSN mencionado. Sin embargo, también hubo configuraciones en las que puede encontrar fácilmente los parámetros de conexión como propiedades simples en el archivo YML como esta:

# You can find more information about this file on the symfony website:
# http://www.symfony-project.org/reference/1_4/en/07-Databases

all:
  doctrine:
    class: sfPropelDatabase
    param:
      # Database vendor
      phptype: mysql
      # Database host
      hostspec: localhost
      # Database name
      database: mydbname
      # Database username
      username: root
      # Database password
      password: 12345
      # Database port
      port: 3306
      # Database encoding
      encoding: utf8      
      # Use persistent connections
      persistent: true

No importa en qué formato esté tu cadena de conexión, en este artículo te explicaré cómo obtener fácilmente el nombre de la base de datos y otros parámetros de la conexión en Symfony 1.4.

Formato DSN

Si su cadena de conexión tiene el formato del nombre de la fuente de datos, puede obtenerla analizando este parámetro con algún código. En este caso, lo vamos a obtener de un controlador simple. Si simplemente desea obtener el nombre de la base de datos con un par de líneas de código, puede usar el siguiente código:

<?php

class exampleActions extends sfActions
{
    public function executeIndex(sfWebRequest $request)
    {   
        // 1. Obtener conexión actual
        $sfCurrentConnection = Doctrine_Manager::getInstance()->getCurrentConnection();

        // O alternativamente, obtenga una conexión por su nombre
        // $connectionName = "doctrine";
        // $sfCurrentConnection = Doctrine_Manager::getInstance()->getConnection($connectionName);
        
        // 2. Obtener parámetros de conexión
        $currentConnectionOptions = $sfCurrentConnection->getOptions();

        // array(
        //   "dsn" => "mysql:host=localhost;dbname=mydbname",
        //   "username" => "myusername",
        //   "password" => "12345",
        //   "other" => array()
        // )
        var_dump($currentConnectionOptions);
        
        // 3. Obtenga el parámetro dsn y analícelo con parse_ini_string
        $sdsn = (string) $sfCurrentConnection->getOption('dsn');
        $connectionData = parse_ini_string(str_replace(";", "\n", parse_url($sdsn)["path"]));

        // $connectionData contendrá los siguientes parámetros
        // 
        // array(
        //    "host" => "localhost",
        //    "dbname" => "mydbname",
        //)

        var_dump($connectionData);
    } 
}

Formato de parámetros

Aunque este formato no es muy común, especialmente porque necesitas usar Propel como ORM, también puedes obtener los parámetros de la conexión usando el siguiente código:

<?php

class exampleActions extends sfActions
{
    public function executeIndex(sfWebRequest $request)
    {   
        // 1. Obtener conexión actual
        $sfCurrentConnection = Doctrine_Manager::getInstance()->getCurrentConnection();

        // O alternativamente, obtenga una conexión por su nombre
        // $connectionName = "doctrine";
        // $sfCurrentConnection = Doctrine_Manager::getInstance()->getConnection($connectionName);
        
        // 2. Obtener parámetros de conexión
        $currentConnectionOptions = $sfCurrentConnection->getOptions();


        // Obtenga los datos de la matriz o directamente del objeto
        var_dump($currentConnectionOptions);
        // $dbname = $sfCurrentConnection->getOption("database");

        // array(
        //    "phptype" => "mysql",
        //    "hostspec" => "localhost",
        //    "database" => "mydbname",
        //    "username" => "login",
        //    "password" => "passwd",
        //    "port" => 80,
        //    "encoding" => "utf8",
        //    "persistent" => true
        // )
    } 
}

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores