Vytvoření přihlašovacího formuláře
- BuGeR
- Člen | 45
Zdravíčko,
chtěl bych si vytvořit přihlašovací formulář, a mít ho v
@layout.latte.
Vytvořil jsem si soubor LoginPresenter.php:
class LoginPresenter extends \Nette\Application\UI\Form {
public function createComponentLoginForm()
{ ... }
a snažím se ho nějak vložit do layoutu takto:
{control loginForm}
jenže laděnka hází chybu:
Component with name 'loginForm' does not exist
Předpokládam, že je to tím, že se ten presenter LoginPresenter.php
vůbec neincludoval do stránky.
Jdu na to správně? Pokud ne, kde dělám prosím chybu, a jak na to? :)
Děkuji..
- castamir
- Člen | 629
Napadá mě jen, že si uděláš komponentu, ve které uděláš veškerou definici prvků a chování a do BasePresenteru dáš jen
protected function createComponentLoginForm()
{ return new TvaKomponenta }
čímž ten kód v BasePresenteru minimalizuješ a zároveň bys to mohl použít i jinde (např. v jiném modulu, ale tím, že to máš v BasePresenteru se to stejně dostane do všech tříd, které od něj dědí).
Safra. Pozdě :D
edit: public=>protected
Editoval castamir (14. 1. 2013 19:46)
- enumag
- Člen | 2118
LoginForm do BasePresenteru strkáš pouze proto, že jej potřebuješ použít ve všech presenterech (layout sdílejí všechny presentery). Většina komponent ale patří jen jednomu konkrétnímu presenteru a tedy v BasePresenteru nemají co dělat.
@castamir: Neměly by továrničky být protected? ;-)
Editoval enumag (14. 1. 2013 19:24)
- Šaman
- Člen | 2666
Existuje ještě jedno řešení mírně okořeněné magií:
V BasePresenteru (tomu se nevyhneš) se může přetížit metoda
createComponent($name)
(ta se zavolá pokud nebyla nalezena
žádná konkrétní továrnička).
A v ní si vytvářím komponenty z továrniček definovaných v configu.
Ono se to hodí na více formulářů, které chceme použít na různých
stránkách (potažmo v různých presenterech), nechceme-li opakované psát
továrničky. Pak stačí přidat nově vytvořenou komponentu/formulář do
příslušné sekce v configu a je možné ji používat napříč
projektem.
Trocha magie tam je, ale vzhledem k nutnosti zavést továrničku do configu (tedy mít někde seznam takto dostupných komponent) si myslím, že to ještě projde.
Editoval Šaman (14. 1. 2013 23:48)