začátečnické ale fundamentální téma
- George2
- Člen | 5
Ahojte!
Jsem začátečník a proto se ptám(možná blbě):
1)viděl jsem příklad $form->addText(…)- super navržené proti cross
site scriptingu atd., rychlé
Ovšem uživatelé chtějí obvykle formuláře přesně odpovídající
papírové předloze – takže je to rozházené po stránce, škoda
mluvit – v dokumentaci je napsáno „naformátuj v HTML“ – jenže tak
se ztratí původně rychle ošetřená bezpečnost, proti cross site
scriptingu…?? Závěr: to mám psát ta super ošetření od nuly v HTML a
objevovat kolo?
- stejný problém s šablonami – jak zkřížit dohromady $form->addText(…)->addRule->… se šablonami šablony také potřebují snadnou odolnost vůči cross site scriptingu, jak to je ošetřeno?
Chci ten kód psát co nejrychleji a co nejrobustněji – dodržet
štábní kulturu, ale tohle jsem nepřekousl
Prosím o radu, nebo mě aspoň nasměrujte.
Předem děkuji
G2
Editoval George2 (2. 2. 2013 1:42)
- Grelek
- Člen | 233
Pokud jsem tě dobře pochopil, měl by ti stačit kód níže.
protected function createComponentMyForm()
{
$form = new Nette\Application\UI\Form;
$form->addText('jmeno', 'Jméno')
->setRequired('Musíte vyplnit jméno');
// další pravidla?
$form->addText('prijmeni', 'Příjmení');
$form->addSubmit('send', 'Odeslat');
$form->onSuccess[] = callback($this, 'myFormSubmitted');
return $form;
}
<!-- můžeš nechat Nette, aby vykreslilo formulář samo -->
{control myForm}
<!-- nebo si ho můžeš vykreslit ručně -->
{form myForm}
{label jmeno /} {input jmeno}
{label prijmeni /} {input prijmeni}
{input send}
{/form}
<!--
můžeš taky napsat {label jmeno}jiný label, než je v komponentě{/label}
{input jmeno atribut=>'jeho hodnota'}
-->
- kubajz
- Člen | 47
<!-- můžeš nechat Nette, aby vykreslilo formulář samo -->
{control myForm}
Jen dodám, že defaultně se formulář vykreslí v tabulce, jak toto chování změnit a vše další potřebné pro práci s formuláři je uvedeno v dokumentaci o formulářích – 500 stran to opravdu nemá.
- kubajz
- Člen | 47
nemůžu si pomoct ,ale stále nevidím v tom Latte tu validaci.Tímto vyřeším možná vysoké nároky na rozmístění vstupních prvků,ale…
Pokud máš na mysli server-side, tak logika kontroly vstupu není věcí Latte, to je pouze šablonovací systém.
Na straně klienta můžeš použít netteForms.js, kouknout do doplňků nebo si napsat vlastní řešení, pravidla se ukládají k jednotlivým inputům do atributu data-nette-rules, takže je odsud jen vytáhneš a zpracuješ.
- George2
- Člen | 5
postnul jsem to pozdě…
Bohužel ne vždy jde (bez ajaxu) validovat vše na straně klienta.
BTW ta dokumentace o formulářích je zas moc stručná.
Pořád mi to zavání tím, že nejlepší je předvygenerovat konečný kód ,
pak si to tam pastnout a ještě se v tom povrtat-to ovšem David Grudl
určitě nechtěl, neboť je to prasárna, navíc bez Latte, o nějakém
zpětném engineeringu se nedá mluvit.
V dokumentaci o formulářích se vyskytuje
class="required"
AHA! to ovšem je základní věc a v dokumentaci to bohužel není
Editoval George2 (2. 2. 2013 2:34)
- Grelek
- Člen | 233
Validace na straně klienta – nalinkuj si do stránky
netteForms.js
. Pokud má uživatel povolený JavaScript, bude pro
něj odesílání formuláře příjemnější. Formuláře jsou díky Latte
ošetřeny proti XSS.
Validace na straně serveru – už máš data z formuláře, dělej si s nimi, co chceš. Nějak je zpracuješ podle svých potřeb, pravidel atd.
Opravdu tě prosím, přečti si tu dokumentaci, třeba několikrát za sebou. A věř jí. Asi ty formuláře jsou dobré, fungují a jsou bezpečné, když se používají.
Editoval Grelek (2. 2. 2013 2:35)
- Filip Procházka
- Moderator | 4668
Latte je jen šablonovací jazyk na zápis HTML značek. XSS a další security vychytávky ti řeší automaticky, když budeš správně používat makra v kombinaci s formuláři.
Jenom bych ti zopakoval, od čeho je dokumentace – od toho, abychom každému nemuseli psát pořád dokola to stejné. Co bys dělal raději? Napsal něco jednou do dokumentace, nebo každému novému člověku odpovídal pořád dokola na ty samé otázky?
Fórum je tady od toho, když něco v dokumentaci nenajdeš a nebo nechápeš. Né, když jsi líný ji číst. Takže teď jdi číst dokumentaci a až si ji klidně 3× přečteš (objevíš spoustu super vychytávek) a pořádně se nad ní zamyslíš a třeba si to i sám vyzkoušíš, tak se můžeš přijít ptát na věci co jsi nepochopil nebo nenašel.
Neber si to nijak zle, ale nikdo tady na fóru z rad nemá nic jiného než jakýsi kredit v komunitě, jméno chceš li. A tím, že nám píšeš, že si odmítáš číst dokumentaci nám v podstatě pliveš do tváře.
Ale omluvu od tebe nechci, omlouvá tě, že jsi tu nový ;)
- Filip Procházka
- Moderator | 4668
Přečti si dokumentaci a zítra (dneska) se zeptej co nepochopíš a my ti rádi poradíme. A úplně nejlíp se na to i vyspi ;)
- japlavaren
- Člen | 404
{form form}
<ul n:if=„$form->hasErrors()“ class=„errors“>
<li n:foreach=„$form->errors as $error“>{$error}</li>
</ul>
…
{label name/} {input name}
{/form}
Editoval japlavaren (3. 2. 2013 19:39)