Cesta k Šablóne v komponente formulára

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

Zdravím ľudia.
Potrebujem poradiť ohľadom cesty k šablóne v komponente.
Mám RegisterForm v components/RegisterForm/…
a keď odkazujem na šablónu tak to nič nezobrazí

$template = new FileTemplate(__DIR__ . '/../templates/Activate/email.latte');

Tak som dumpol cestu

dump(__DIR__ . '/../templates/Activate/email.latte');

a zistil som, že to odkazuje na

/web/app/components/RegisterForm/../templates/Activate/email.latte

Ako mám povedať komponente nech hľadá v

/web/app/templates/Activate/email.latte
echo
Člen | 134
+
0
-

Zdravím, konstanta __DIR__ odkazuje na složku souboru, ve kterém je volána. To co potřebuješ, je něco jako

$template = new FileTemplate($appDir . '/templates/Active/email.latte');
SontoEremo
Člen | 341
+
0
-

echo napsal(a):

Zdravím, konstanta __DIR__ odkazuje na složku souboru, ve kterém je volána. To co potřebuješ, je něco jako

$template = new FileTemplate($appDir . '/templates/Active/email.latte');

Hej ale skončím s chybou Undefined variable: appDir

David Kudera
Člen | 455
+
+1
-

Ano, protože jen tak sama od sebe existovat nemůže. Pokud ten form máš ale registrovaný jako službu, tak mu tu proměnnou můžeš předat v konfiguraci.

Tady je jedna z možností spolu s generovanou továrničkou, ale předat to můžeš jakkoliv jinak podle toho, jak to máš právě napsaný..

services:

	-
		implement: App\Components\RegisterForm\IRegisterFormFactory
		setup:
			- setAppDir(%appDir%)

Edit: metodu setAppDir si musíš vytvořit sám

Editoval David Kudera (28. 6. 2014 18:55)

SontoEremo
Člen | 341
+
0
-

@DavidKudera

metodu setAppDir si musíš vytvořit sám

Čože? a to sa preboha kde a ako robí ja som myslel, že keď existuje __DIR__ tak musí aj existovať niečo ak APP_DIR

Zatiaľ som dal

$template = new FileTemplate($_SERVER['DOCUMENT_ROOT'] . 'app/templates/Activate/email.latte');

:) ja viem … ale zatiaľ :)

Editoval SontoEremo (28. 6. 2014 19:03)

David Kudera
Člen | 455
+
0
-

__DIR__ je ale standardní součástí PHP a ne Nette. APP_DIR sice dřív existovala (v Nette), ale od toho se upustilo. Někteří se tu už tak trochu rozčilovali proč k tomu došlo, takže odpověď na to najdeš někde na fóru.

A k tomu formuláři. Když ho chceš v presenteru vytvořit, tak tvoříš novou instanci sám nebo jej máš registrovaný jako službu (nebo jako generovanou továrničku) a necháš si ho do presenteru injectnout? Jak ten form používáš? Protože ten postup, co jsem napsal já, počítá s tím, že to máš jako službu a že v ní (v té tvé komponentě) máš metodu setAppDir. Stejně tak ale se to dá použít s konstruktorem.

class MyForm
{

	__construct($appDir) {}

}
services:

	-
		implement: MyFormFactory
		class: MyForm(%appDir%)

Editoval David Kudera (28. 6. 2014 19:42)

SontoEremo
Člen | 341
+
0
-

@DavidKudera
Ja som to riešil podľa **@Šaman-a ** TAKTO

David Kudera
Člen | 455
+
0
-

No tak to je přesně to, jak jsem ti to sem psal.. Jen stačí rozšířit tu konfiguraci v neon, jak jsem ti psal tady a tu tvoji komponentu, aby přijala tu appDir proměnou

Editoval David Kudera (28. 6. 2014 20:07)