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 | 8285
 
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 | 559
 
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)