config.neon – vlastní caching storage a presenter factory

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
vkozmik
Člen | 2
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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']
vkozmik
Člen | 2
+
0
-

Díky, udělal jsem factory metodu a Storage načetl přes require_once a oboje funguje :-)

finwe
Člen | 58
+
0
-

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
+
0
-

[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
+
0
-

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)

finwe
Člen | 58
+
0
-

Díky!