config.neon – vlastní caching storage a presenter factory
- vkozmik
- Člen | 2
Zdravím, snažím se v Nette-2-beta použít vlastní storage pro cachování, nastavení bych chtěl dát do neonu:
cacheStorage:
class: Nette\Caching\Storages\MemcachedStorage
funguje
cacheStorage:
class: MujNS\MujStorage
nefunguje, třída nenalezena – přitom v kódu např. presenteru ta samá třída použít lze .. aplikuje se i tady RobotLoader?
Na problémy jsem narazil i s PresenterFactory, nevím jak lze předat do konstruktoru továrny kontext, takhle to správně evidentně není:
presenterFactory:
class: MujNS\MojePresenterFactory
arguments: ['@Nette\DI\IContainer']
Díky předem za rady..
- David Grudl
- Nette Core | 8228
RobotLoader se asi neaplikuje, protože k jeho vytvoření je potřeba cacheStorage – problém slepice a vejce.
Do továrny se kontext předává v prvním parametru automaticky.
- srigi
- Nette Blogger | 558
vkozmik napsal(a):
Na problémy jsem narazil i s PresenterFactory, nevím jak lze předat do konstruktoru továrny kontext, takhle to správně evidentně není:
presenterFactory: class: MujNS\MojePresenterFactory arguments: ['@Nette\DI\IContainer']
Do ziveho konstruktora Container nedostanes – arguments moze predavat iba skalarne typy (zatial?). Musis si to prepisat na staticku factory:
presenterFactory:
factory: MujNS\MojePresenterFactory::factory
<?php
namespace MujNS;
use Nette\DI\IContainer;
class MojePresenterFactory
{
public static function factory(IContainer $container)
{
// TODO
}
}
?>
Je treba ale spomenut, ze aj ked nahodou budeme vediet do ziveho konstruktora predat neskalarny typ, dnes nie je moznost v Neone povedat, aby sa tam predal Container (hadam sa nemylim, vcera som sa s tym hral a ja som na to neprisiel).
- Filip Procházka
- Moderator | 4668
Nemýlíš se srigi, nejde to. Jediným řešením je require té třídy,
před načtením configu (::loadConfig()
). A nebo čistěji
services:
myStorage:
factory: MyNS\MyStorage::create #automaticky dostane DI\Container
a vlastním službám potom
services:
myService:
class: MyNs\MyServiceClass
arguments: ['@myStorage']
- finwe
- Člen | 58
Abych nemusel zakládat extra vlákno, zeptám se tady na stejné téma (páč předpokládám, že se to celé aspoň trochu změnilo):
Nette 2.0-rc2: když nadefinuju vlastní presenterFactory, skončím na
výjimce
Multiple services of type Nette\Application\IPresenterFactory found: nette.presenterFactory, presenterFactory
,
ať už použiju factory (na factory) nebo ne. Momentálně mám v configu:
presenterFactory:
class: NS\Application\PresenterFactory
factory: NS\Application\PresenterFactory::factory
Když vynechám první řádek, tak se použije nettí presenterFactory. Když vynechám druhý, je to stejné jako s oběma řádky – vyhodí se výjimka výše. Co dělám špatně? Na téma nahrazování vestavěných servis jsem toho na netu moc nenašel (taky asi proto, že na každou verzi byly napsány nějaké rady a ty už teď tak nějak neplatí)
- Nox
- Člen | 378
[smazán nesprávný kód]
Asi by měl jít i zápis nette.presenterFactory
viz https://forum.nette.org/…-config-neon
Editoval Nox (30. 1. 2012 14:24)
- Filip Procházka
- Moderator | 4668
Nette si službu, presenterFactory, prefixoval.
services:
nette.presenterFactory:
class: NS\Application\PresenterFactory
factory: NS\Application\PresenterFactory::factory
Editoval HosipLan (30. 1. 2012 15:10)