Creando conexiones dinámicas en Laravel

Para crear conexiones dinámicas en Laravel, que varíen en función de nuestras necesidades, tendremos que modificar los valores de los archivos de configuración, que están dentro de la carpeta config.

Los pasos son :

  • Añadimos al archivo .env  las nuevas referencias de valores de conexión.
  • Creamos un tipo de conexión nueva en el archivo que establece nuestra conexión.
  • Creamos una clase que se seteará dinámicamente  los valores.

El archivo .env

Es el encargado de establecer la estructura básica del comportamiento de Laravel para conexiones entre otras cosas.

Aquí añadiremos el marco de las conexiones a la base de datos y al servidor.

DB_CONNECTION_VAR=server_variable
DB_HOST_VAR=  
DB_HOST_VAR=  
DB_PORT_VAR= 
DB_DATABASE_VAR=   
DB_USERNAME_VAR=
DB_PASSWORD_VAR= 
 
FTP_HOST= 
FTP_PASSWORD=  
FTP_USERNAME= 
FTP_PORT= 

El archivo database.

Como sabemos este archivo establece los términos de conexión a la base de datos,  e inicialmente  toma  valores del archivo .env.

Podemos crear en él, tantas conexiones,  como necesitemos, así que lo que haremos será crear una nueva conexión, dentro de database,  que será nuestro conexión dinámica:

'connections' => […….
 'server_variable' => [ 
 'driver' => 'mysql', 
 'url' => env('DB_DATABASE_URL_VAR',''), 
 'host' => env('DB_HOST_VAR', ''), 
 'port' => env('DB_PORT_VAR', ''), 
 'database' => env('DB_DATABASE_VAR','' ), 
 'username' => env('DB_USERNAME_VAR','' ), 
  'password' => env('DB_PASSWORD_VAR','' ), 
   'unix_socket' => env('DB_SOCKET_VAR', ''), 
     'charset' => 'utf8mb4', 
   'collation' => 'utf8mb4_unicode_ci', 
    'prefix' => '', 
  'strict' => false, 
   'engine' => null, 
    ], 
 …………..] 

Lo que haremos ahora  es crear una clase que modifica los valores del archivo config, para poder acceder a ellos de modo dinámico y variarlos en función del tipo de conexión que queremos establecer.

La clase

 ?php 
 namespace App\Personalizado;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Storage;
 use Illuminate\Support\Facades\Config;
  
 class Conexion
 {
          
     public function conectar()
     {
       $hora = date("H.i.s");
       $sitio = DB::table('sitios')->where('hora_deseada','=',$hora)->get();
       
     if ($sitio); 
          {
             $sitio = DB::table('sitios')->where('id')->first();
             $driv='msql';
             $puerto_conex=$sitio->port_conex;
             $database_name=$sitio->nombre_bd;
             $user_name=$sitio->usuario_bd;
             $contra_=$sitio->pass_bd;
             $host_con=$sitio->host_conex;
             $user_FTP=$sitio->user_FTP; 
             $pass_FTP=$sitio->pass_FTP; 
             $port_conex=$sitio->port_conex;

Establecemos la ruta de los  archivos database y filesystem, dentro del archivo config, utilizando la convención del punto de Laravel, y seteamos los datos dinámicos tomados de la bd.

 Config::set([
  'database.connections.server_variable.driver'=>$driv,
  'database.connections.server_variable.database'=>$database_name,   'database.connections.server_variable.username'=>$user_name,
  'database.connections.server_variable.password'=>$contra,
  'filesystem.disk.ftp.driver'=> 'ftp',
  'filesystem.disk.ftp.host' => $host_con,
  'filesystem.disk.ftp.username' => $user_FTP,
  'filesystem.disk.ftp.password' => $pass_FTP,
  'filesystem.disk.ftp.port' => $puerto_conex,
  
       ]);

 Solo conectaremos por ahora via ftp_connect  

 $driver = ( Config::get('filesystem.disk.ftp.driver'));
     
       $host = ( Config::get('filesystem.disk.ftp.host'));
       
       $username = ( Config::get('filesystem.disk.ftp.username'));
       
       $password = ( Config::get('filesystem.disk.ftp.password'));
       
       $port = ( Config::get('filesystem.disk.ftp.port'));
      
       $conex = [$driver, $host, $username, $password, $port];
  
       $ftp_conn = ftp_connect($host) or die("no conecta ftp");
   
       if ($ftp_conn){
  
         echo "<br>Conectado";
  
       $login =ftp_login($ftp_conn,$username,$password);
       
       ftp_pasv($ftp_conn, TRUE);
  
       if($login)
         {echo "<br>logeado";
  
       $remote='httpdocs/tienda/import/importacion.csv';
       $local='./storage/app/csv/convertidos.csv';
         if (ftp_put($ftp_conn,$remote,$local, FTP_BINARY))
           { echo "<br>Upload";}
         else
           {echo "<br>not upload";}
  
         }
       else
         {echo "fallo login";}
  
       if(ftp_close($ftp_conn))
         {echo "conexion cerrada";};
    
    } 
    
     return $conex;
    
     }  

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

….un sueño es casi todo  y más que  nada;  más que todo al soñarlo, casi nada después……

Trabajando con el Config en Laravel

Una de las potentes características de Laravel que nos facilita de un modo casi mágico crear y escalar una aplicación es su ductilidad para establecer y modificar parámetros de configuración, diferentes  y alternos.

En el directorio config, podremos crear nuestra propia configuración de la api, no ya solo de modificar parámetros, sino además de crear nuestros propios archivos de configuración

Crear un archivo de configuración

Para crearlo basta con crear en la carpeta config, un nuevo file, a modo de ejemplo podemos llamarlo, sitios.php.

Siguiendo las convenciones de Laravel, un archivo de configuración es esencialmente un array de arrays que agrupa parámetros, o sea que con declarar un return que devuelva un arreglo vacío dentro, ya tendríamos un archivo listo.

Nuestro próximo paso será añadir las opciones que declararan el comportamiento que esperamos, por tanto siendo un array de array acepta matrices multidimensionales.

Supongamos que trabajaremos con tres tipos de sitios, sitio_grande, sitio_mediano y sitio_pequeño,  a los cuales nos interesa configurarles las opciones url, cookie, y el tiempo  de vida de esta; entonces creamos para ellos una matriz múltiples con sus parámetros:

 return [ 
     'sitio_grande' => [ 
                        'url' => '',
                        'cookie' => '',
                        'durac_cookie' => ''
             ], 
     'sitio_mediano' => [ 
                        'url' => '',
                        'cookie' => '',
                        'durac_cookie' => ''
             ],
     'sitio_pequeño' => [ 
                        'url' => '',
                        'cookie' => '',
                        'durac_cookie' => ''
             ],
     ]; 

En nuestro ejemplo no hemos dado valor a las variables, pues queremos asignarlos luego de modo dinámico, pero si no fuera necesario y tuviéramos valores únicos, el archivo pordria quedar configurado asi:

 return [ 
     'sitio_grande' => [ 
                        'url' => 'https://sitio_grande.com',
                        'cookie' => 'ksiwiwjwoiii99k393j33’303j0',
                        'durac_cookie' => '3600'
             ], 
     'sitio_mediano' => [ 
                        'url' => 'https://sitio_mediano.com',
                        'cookie' => 'msksnsossjwoiii5858484n33j0',
                        'durac_cookie' => '3600'              
 ],
     'sitio_pequeño' => [ 
                        'url' => 'https://sitio_pequeño.com',
                        'cookie' => '0siwiwj09090393j33’zjsjiwwj9',
                        'durac_cookie' => '3600'
             ],
     ]; 

Acceder a la configuración

Para acceder a la configuración podemos usar la fachada Config, y su método get, siguiendo la notación de punto. Podriamos acceder a la cookie del sitio mediano, de este modo:

dd(Config::get(‘sitios.sitio_mediano.cookie’);

Esto nos devolverá el valor de la configuración para el sitio medio, y su variable cookie.

La estructura es :

nombre_archivo_configuracion.nombre_array_nivel_superior.variable.

Para acceder a las variables y modificarlas, la fachada Config, dispone del método set, con el cual pasamos un array con dos valores: la ruta de la variable y el valor que estamos asignadole.

Config::set(‘sitios.sitio_mediano.cookie’,
’82828h2922992922n28282’);

Funcion Config()

Se puede acceder también a los parámetros de configuración mediante la función Config(), su diferencia con la fachada es que no usa métodos para ejecutarse

Para devolver los valores:

dd(config(‘sitios.sitio_mediano.cookie’);

 Para asignar valores:

config(‘sitios.sitio_mediano.cookie’,
’82828h2922992922n28282’);

o

config(‘[sitios.sitio_mediano.cookie’=>
’82828h2922992922n28282’]);

Para aprovechar de modo más integro y abarcador, las posibilidades de configuración de Laravel, podemos utilizar las variables de entorno, lo cual protege aún mas nuestros datos y su acceso.

La estructura que nos ofrece Laravel es hacer referencia a los valores que hemos establecido en el archivo env.  donde guardamos las variables de entorno. En nuestro ejemplo nuestro archivo sitios.php quedaría así:

 return [ 
     'sitio_grande' => [ 
                        'url' => env('URL_SITIO_GRANDE'),
                        'cookie' => env('COOKIE_SITIO_GRANDE'),
                        'durac_cookie' => ' env('DURAC_ COOKIE_SITIO_GRANDE')
             ], 
     'sitio_mediano' => [ 
                        'url' => env('URL_SITIO_MEDIANO'),
                        'cookie' => env('COOKIE_SITIO_MEDIANO'),
                        'durac_cookie' => ' env('DURAC_COOKIE_SITIO_MEDIANO')
 ],
     'sitio_pequeño' => [ 
                        'url' => env('URL_SITIO_PEQUEÑO'),
                        'cookie' => env('COOKIE_SITIO_PEQUEÑO'),
                        'durac_cookie' => ' env('DURAC_COOKIE_SITIO_PEQUEÑO')
             ],
     ]; 

Para lograr esto bastara con haber añadido en el archivo env los valores que esperamos recibir.

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

…..subir montañas, hermana hombres……