začátečnické ale fundamentální téma

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

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?

  1. 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)

George2
Člen | 5
+
0
-

Nechci tu spamovat, ale bez nette jsem vše dělal neefektivně a chci to změnit. Zároveň očekávám něco jiného než „ty jsi blbec, nejdřív si naštuduj tuhle 500 stránkovou brožuru, pak se nám omluv a my ti pak možná poradíme“

Editoval George2 (2. 2. 2013 1:51)

Grelek
Člen | 233
+
0
-

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
+
0
-

<!-- 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á.

George2
Člen | 5
+
0
-

hmm…

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…

Grelek
Člen | 233
+
0
-

Aby ti fungovala validace na straně klienta, musíš nalinkovat netteForms.js do aplikace. Standardně je v www/js/netteForms.js.
Latte je perfektní počin, tam si můžeš vesele vypisovat prvky takto snadně a Latte si zařídí ochranu samo.

kubajz
Člen | 47
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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ý ;)

George2
Člen | 5
+
0
-

Já se všem omlouvám, dneska mě něco hrozně naštvalo a nevím jak to ventilovat. V podstatě se tady hádám s monitorem.

Filip Procházka
Moderator | 4668
+
0
-

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
+
0
-

{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)