Cesta k Šablóne v komponente formulára
- SontoEremo
- Člen | 341
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
- SontoEremo
- Člen | 341
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
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
@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
__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)
- David Kudera
- Člen | 455
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)