Jak na vlastni ILatteFactory

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

Zdravim v inom vlakne (https://forum.nette.org/…tml-a-opacne) som riesil problem, ktory viacmenej vyzaduje custom implementaciu ILatteFactory (s vlastnymi property, ktore sa nastavia v startupe a tie sa potom vyuziju k nastavovaniu Latte Engine), nejako sa mi nedari to v configu nasrubovat aby sa pouzivala ta moja. Poradi niekto ako to spravne zapisat? Pripadne ak by niekoho napadlo riesenie povodneho problemu inak?

Definoval som si vlastnu classu:

class MyLatteFactory implements \Nette\Bridges\ApplicationLatte\ILatteFactory {

	/**
	 * @return Latte\Engine
	 */
	function create()
	{
		// TODO
		return new Latte\Engine;
	}
}

v konfigu som skusal rozne veci napr.:

services:
	latte.latteFactory:
		class: \Latte\Engine
		implement: \Nette\Bridges\ApplicationLatte\ILatteFactory
		create: \MyLatteFactory

Co ale vedie k chybe:
https://dl.dropboxusercontent.com/…14.09.39.png

Takze to vyzera, ze sa sluzba neprepise cela (stale tam ostava ten setup a spol)

Editoval matopeto (9. 1. 2017 14:10)

CZechBoY
Člen | 3608
+
+1
-

Na nette 2.3 mi jede tohle (edit: v nette 2.4 jen pro statickou metodu create)

services:
	latte.latteFactory:
            class: Latte\Engine
            create: App\MyLatteFactory::create
            implement: Nette\Bridges\ApplicationLatte\ILatteFactory

Editoval CZechBoY (9. 1. 2017 16:57)

matopeto
Člen | 395
+
0
-

Vdaka za to klucove ::create :)

matopeto
Člen | 395
+
0
-

Bohuzial ale v 2.4 hadze notice:

Non-static method MyLatteFactory::create() should not be called statically, assuming $this from incompatible contex

Generovany kod na ktorom je chyba je:

...

public function create()
{
           $service = \MyLatteFactory::create();
           if (!$service instanceof Latte\Engine) {
               throw new Nette\UnexpectedValueException('Unable to create service \'latte.latteFactory\', value returned by factory is not Latte\Engine type.');
           }
...

Ako zapisat generovanie „nestatickej“ factory?

CZechBoY
Člen | 3608
+
+1
-

Hm, tak tu třídu přidej jako službu a do továrny zkus odkázat na tu službu.

services:
	- App\MyLatteFactory
    latte.latteFactory:
            class: Latte\Engine
            create: @App\MyLatteFactory::create
            implement: Nette\Bridges\ApplicationLatte\ILatteFactory

Což mi připomíná problém s RouterFactory, takže by to šlo asi udělat stejně krátce?

	- App\MyLatteFactory
latte.latteFactory: @App\MyLatteFactory::create

Editoval CZechBoY (9. 1. 2017 16:43)

matopeto
Člen | 395
+
0
-

Vdaka, super, to funguje, nenapadlo by ma to :)