JFactory
にはgetDbo
メソッドがありますが、setDbo
はありません。どうして?単体テストでグローバルデータベースドライバーを上書きできると便利です。これを行う他の方法は?
編集:$database
はJFactory
のパブリックプロパティなので、次のように上書きできます。
$myDatabase = new JDatabaseDriver ...
JFactory::$database = $myDatabase;
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')
を必要なドライバーに置き換えることができます。