jak vytahnu konfiguraci z config.neon v komponente

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

Ahoj,
můžete mě někdo nasměrovat jak se dostat ke konfiguraci v konfigu z componenty (extends UI\Control)

potrebuji neco jako

mycomponent:
	images: %wwwDir%/images
	photos: %wwwDir%/photos

hadam že to bude cca takto

$this->getPresenter()->contex-> a tady co?
David Matějka
Moderator | 6445
+
0
-

Spravne reseni je registrovat tovarnu na komponentu jako sluzbu a parametry predat z neonu, viz doc

Felix
Nette Core | 1247
+
+1
-

Hadas spatne (resp. takhle by to slo, ale je to blbe).

Udelej si interface, treba IMyComponentFactory, s jednou metodou create().

interface IMyComponentFactory
{
	/**
	 * @return MyComponent
	 */
	function create();
}

Potom si dej do configu.

services:
	- implement: IMyComponentFactory
	  arguments: [%mycomponent%]
class MyComponent extends Control
{
	function __construct(array $params) {
		// treba..
	}
}

Do presenteru si pak nainjectujes onen interface a mas to.

/** @var IMyComponentFactory @inject */
public $myComponentFactory;

protected function createComponentMyComponent()
{
	return $this->myComponentFactory->create();
}

Pokud by jsi chtel predavat komponente nejaky parametry kdyz ji tvoris, tak si to predej do create(['a' => 1]);

A musel by jsi jeste trochu upravit config ;-)

Editoval Felix (16. 9. 2014 14:24)

ondraondra81
Člen | 82
+
0
-

Ten interface už mám, nicméně v konstruktoru už mám

function __construct(Facades\Articles $articles, Facades\Images $images)

pokud ho tedy rozšířím takto

function __construct(Facades\Articles $articles, Facades\Images $images, $settings)

stačí pořád v config.neon a proběhne autowired?

services:
    - implement: IMyComponentFactory
      arguments: [%mycomponent%]

nebo už tam potom musim nějak zadat i ty ostatni sluzby

David Matějka
Moderator | 6445
+
0
-

@ondraondra81 bud dej to settings na prvni misto, pak se zbytek autowiruje. Nebo muzes pouzit:

arguments: [..., ..., %components%]
#nebo
arguments: [2: %mycomponent%] #snad je to cislovany od nuly
#nebo (a tady si nejsem jistej, jestli to funguje)
arguments: [settings: %mycomponent%]
ondraondra81
Člen | 82
+
0
-

díky, celou dobu jsem těď hledal článek kde jsem to kdysi četl.
A nenašel :(
ani v dokumentaci jsem nic nenašel.