DI Kontejner – příklad z dokumentace
- bluray
- Člen | 178
Dobrý den, v tomto
článku je následující příklad:
Definice služby:
services:
database:
class: Nette\Database\Connection
create: DbFactory::createConnection
DbFactory::createConnection:
class DbFactory
{
static function createConnection(Nette\DI\Container $container)
{
...
}
}
Vygeneruje:
function createServiceDatabase()
{
return DbFactory::createConnection($this);
}
Má metoda DbFactory::createConnection() nějaký praktický význam? Jak by
byla uvnitř implementována?
Proč jí musím zadávat Container?
V příkladu výše je toto:
services:
database: Nette\Database\Connection(%dsn%, %user%, %password%)
To mi vytvoří Connection samo a nemusím se o nic starat. Jak jsem pochopil, v metodě createConnection budu muset nějak vytvořit sám…
Díky za radu
- David Matějka
- Moderator | 6445
To v dokumentaci jsou pouze priklady, jak se mohou zapisovat sluzby. Proste ze si muzes napsat factory, ktera vytvori instanci urcity sluzby.
Pripojeni k databazi bys stejne takto vytvaret nemel, od toho je database extension a konfigurace v neonu
- David Matějka
- Moderator | 6445
Ma to smysl, pokud je vytvareni sluzby slozitejsi, prikladem je RouterFactory v sandboxu, ktery vytvari router