web-dev-qa-db-ja.com

グローバルデータベースドライバーを上書きする

JFactoryにはgetDboメソッドがありますが、setDboはありません。どうして?単体テストでグローバルデータベースドライバーを上書きできると便利です。これを行う他の方法は?

編集:$databaseJFactoryのパブリックプロパティなので、次のように上書きできます。

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

setDboのような単純な関数(私が知っている)ではなく、データベースドライバーを設定できます。

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'),
            )
        );
    }
}
_

したがって、$this->get('database.driver')を必要なドライバーに置き換えることができます。

2
Lodder