Factory – problém s __construct()
- Newer
- Člen | 47
Hoj, rozhodl jsem se udělat si továrnu na zasílání mailů s latte šablonou, ale tracy hlásí:
Service of type Nette\Bridges\ApplicationLatte\TemplateFactory needed by $templateFactory in __construct() not found. Did you add it to configuration file?
někdo nějaký tip co jsem opoměl?
Edit 1) Tohle funguje, proč nefunguje verze s konstruktorem?
Edit 2) Nefunguje, jen tracy nedetekovala chybu. Chyba: call member function on null při volání na templateFactory, takze neni injected..
Editoval Newer (14. 2. 2021 20:10)
- Elvis77
- Člen | 4
Potvrzuji podivné chování třídy
Nette\Bridges\ApplicationLatte\TemplateFactory.
Používám PHP 7.4 a Nette 3.1.
Příklad funkčního řešení:
Továrnička
Zde deklaruji že TemplateFactory je třída
Nette\Application\UI\TemplateFactory.
Pokud v továrničce použiji třídu
Nette\Bridges\ApplicationLatte\TemplateFactory tak to nefunguje a dostanu:
Control komponenty
V komponentě oproti tomu deklaruji že TemplateFactory z konstruktoru je
třída Nette\Bridges\ApplicationLatte\TemplateFactory. To funguje.
Tudíž děje se nějaká podivnost pokud objekt třídy Nette\Bridges\ApplicationLatte\TemplateFactory předávám přes továrnu do konstruktoru komponenty.
- Marek Bartoš
- Nette Blogger | 1297
Třídy se autowirují podle klíče type, nikoli factory, takže když je třída zaregistrována takto, tak jen ten type bude fungovat:
Ale pokud ji zaregistruje takto, tak se type vytvoří podle factory, a tedy je identický
- d@rkWolf
- Člen | 167
Zrovna sem narazil na to samé, projel sem composer update a editor na mě začal řvát, že ITemplateFactory a ITemplate je deprecated…
Tak jsem to změnil na Nette\Bridges\ApplicationLatte\TemplateFactory a createTemplate(): Nette\Application\UI\Template a výsledek je:
Service of type App\Model\MailService: Service of type Nette\Bridges\ApplicationLatte\TemplateFactory needed by $templateFactory in __construct() not found. Did you add it to configuration file?
Samozřejmě v 3.1 verzi Mailing dokumentace u „Použití v Nette
Application“ nic o tom, že aby to fungovalo, je nutné takto:
latte.templateFactory: Nette\Bridges\ApplicationLatte\TemplateFactory
registrovat tu template factory v neonu není.