Jak autowirenout pojmenovanou službu podle rodiče?
- CZechBoY
- Člen | 3608
Zdravím,
mám dva typy modelů a k nim dva typy databáze – datová a webová.
Aktuálně mám víc modelů používajících datovou databázi takže mám
nastavený autowire na dataovou databázi. V případě webových modelů si
ručně předávám službu:
services:
- NS\MyWebModel(@database.webConn.context) # model s pristupem do webove db
- NS\MyDataModel # model s pristupem do datove db
Tyto modely se také liší tím, že dědí od BaseModel, resp. BaseWebModel.
Lze tedy nějak (jak?) pomocí rodiče určit jaká služba (databáze) se
má použít?
Díky
- David Matějka
- Moderator | 6445
Nyni to neni mozne, musel by sis napsat vlastni extension. Ale asi by nebyl
problem pridat podporu do dekoratoru,
aby se nechaly uvest arguments
, takze by zapis mohl vypadat treba
takhle:
decorator:
BaseWebModel:
arguments: [connection: @database.webConn.context]
- CZechBoY
- Člen | 3608
@DavidMatějka: buď jsem to nepochopil, nebo špatně přepsal :(
decorator:
NS\BaseWebModel:
arguments: [db: @database.webConn.context]
Takhle to je dobře nebo špatně?
Dostávám exception
Nette\InvalidStateException
Unknown configuration option decorator.NS\BaseWebModel.arguments.
Editoval CZechBoY (13. 10. 2015 17:45)
- David Matějka
- Moderator | 6445
precti si ten prispevek znovu :) pisu, ze to zatim neni mozne, ale ze by asi nebyl problem pridat podporu do dekoratoru
- newPOPE
- Člen | 648
@CZechBoY
// config.neon
- FirstDbContext(...)
- SecondDbContext(...)
- FooService
- BarService
// Db context childs
class FirstDbContext extends \Nette\Db\Context {}
class SecondDbContext extends \Nette\Db\Context {}
// FooService
public function __construct (FirstDbContext) {...}
// BarService
public function __construct (SecondDbContext) {...}
- CZechBoY
- Člen | 3608
@newPOPE Myslim, že jsem něco přehlídl :-)). Díky za ukázku, už
jsem to pochopil jak to myslíš.
Akorát jsem si uvědomil, že to asi nebude potřeba …
Webový modely maj v konstruktoru přímo DB\Context, datové modely mají
DbResolver, který jim databázi dodá až potom, co bude vědět
kterou dodat.
Nastavil jsem teda webovou databázi jako autowired=true, datové databáze mají autowired=false.
Při druhé (nechápu proč ne při první) službě využívající Db\Context mi Nette vyhodí BSOD, že nemůže najít Db\Context službu.
Neví někdo čím by to mohlo být?
database:
webConn:
dsn: ...
user: ...
password: ...
autowired: true
Editoval CZechBoY (24. 11. 2015 13:07)