web-dev-qa-db-fra.com

Écraser le pilote de base de données global

JFactory a une méthode getDbo, mais pas de setDbo. Pourquoi? Il peut être utile pour les tests unitaires de pouvoir écraser le pilote de base de données global. Une autre façon de faire ça?

EDIT:$database est une propriété publique de JFactory, je peux donc simplement l'écraser de la manière suivante:

$myDatabase = new JDatabaseDriver ...
JFactory::$database = $myDatabase;
2
Olle Härstedt

Vous pouvez définir le pilote de base de données, mais pas avec une fonction simple (que je sache), telle que setDbo.

Si vous regardez le paquet Joomla Database Framework :

use Joomla\Database;

class MyApplication extends AbstractApplication
{
    protected $db;

    protected function initialise()
    {
        // Make the database driver.
        $dbFactory = new Database\DatabaseFactory;

        $this->db = $dbFactory->getDriver(
            $this->get('database.driver'),
            array(
                'Host' => $this->get('database.Host'),
                'user' => $this->get('database.user'),
                'password' => $this->get('database.password'),
                'port' => $this->get('database.port'),
                'socket' => $this->get('database.socket'),
                'database' => $this->get('database.name'),
            )
        );
    }
}

Vous pouvez donc remplacer $this->get('database.driver') par le pilote dont vous avez besoin.

2
Lodder