Nedaří se připojit k databázi (2)
- Tori
- Člen | 32
Reaguji na toto
vlákno (které už je zamčené).
Nette mi vyhodila stejnou výjimku „Configuration must be array, string or
ArrayObject.“ Příčinou ale bylo to, že
Environment::getConfig('database')
vrací instanci třídy Config,
která se v konstruktoru DibiConnection netestuje. Mírně jsem upravila
konstruktor, ale zajímalo by mne, jestli není vhodnější způsob řešení.
Děkuji za radu/názor.
// bootstrap.php
dibi::connect(Environment::getConfig('database'));
// DibiConnection.php, změněná část konstruktoru
// DSN string
if (is_string($config)) {
parse_str($config, $config);
} elseif ($config instanceof ArrayObject || $config instanceof Config) { // zmena
$config = (array) $config;
} elseif (!is_array($config)) {
throw new InvalidArgumentException('Configuration must be array, string or ArrayObject.');
}
/edit: Nette 1.0.0 pro PHP 5.2, Dibi 1.2 (revision 3b2ca19 released on 2009–09–18)
Editoval Tori (10. 9. 2010 0:33)
- Blizzy
- Člen | 149
Upravovat konstruktor určitě není správné řešení, lepší je upravit vstupní data.
Objekt Config lze převést na pole pomocí funkce toArray(). Pokud by byl problém v tomto, tak je to možné udělat následovně:
dibi::connect(Environment::getConfig('database')->toArray());
Problém může být i v tom, že config není načtený nebo načítá
nějaké špatné informace (které nejsou pole), takže můžeš taky zkusit
debugovat (přes dump
) to, co skutečne do
dibi::connect
vstupuje za parametry.