Home > OS >  Codeigniter 4 get configuration array by passing a dbgroup
Codeigniter 4 get configuration array by passing a dbgroup

Time:05-17

Many websites including official site state about connecting database connections on a dbgroup, however I hardly found a website that talks about getting only an array of configuration.

This idea is that we can make several data adapter objects like OAuth\Pdo without an unused real database connection to get the config.

How can I achieve this?

CodePudding user response:

Found an answer from looking at the system class CodeIgniter\Config\BaseConfig.

The files in app/Config including app/Config/Database.php are instances of BaseConfig, which means we can get the public properties of Database config by:

$database = new \Config\Database();

Getting configuration array by passing a dbgroup will then remain in three steps:

Duplicate a database connection in .env and update the values:

database.newdbgroup.hostname = localhost
database.newdbgroup.database = newdbgroup
database.newdbgroup.username = newdbgroup-username
database.newdbgroup.password = newdbgroup-password
database.newdbgroup.DBDriver = MySQLi
database.newdbgroup.DBPrefix =

Duplicate a database connection in app/Config/Database.php. We should not update the values this time:

public $newdbgroup = [
    'DSN'      => '',
    'hostname' => 'localhost',
    'username' => '',
    'password' => '',
    'database' => '',
    'DBDriver' => 'MySQLi',
    'DBPrefix' => '',
    'pConnect' => false,
    'DBDebug'  => (ENVIRONMENT !== 'production'),
    'charset'  => 'utf8',
    'DBCollat' => 'utf8_general_ci',
    'swapPre'  => '',
    'encrypt'  => false,
    'compress' => false,
    'strictOn' => false,
    'failover' => [],
    'port'     => 3306,
];

Check the expected outcome:

$database = new \Config\Database();

echo '<pre>';
var_dump($database->newdbgroup);
echo '</pre>';

exit();

Which outputs:

array(17) {
  ["DSN"]=>
  string(0) ""
  ["hostname"]=>
  string(9) "localhost"
  ["username"]=>
  string(19) "newdbgroup-username"
  ["password"]=>
  string(19) "newdbgroup-password"
  ["database"]=>
  string(10) "newdbgroup"
  ["DBDriver"]=>
  string(6) "MySQLi"
  ["DBPrefix"]=>
  string(0) ""
  ["pConnect"]=>
  bool(false)
  ["DBDebug"]=>
  bool(false)
  ["charset"]=>
  string(4) "utf8"
  ["DBCollat"]=>
  string(15) "utf8_general_ci"
  ["swapPre"]=>
  string(0) ""
  ["encrypt"]=>
  bool(false)
  ["compress"]=>
  bool(false)
  ["strictOn"]=>
  bool(false)
  ["failover"]=>
  array(0) {
  }
  ["port"]=>
  int(3306)
}
  • Related