Form::addProtection a formulářová makra

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

Ahoj, bylo by milé, kdyby makro {form formName} vykreslovalo i csrf ochranu, pokud je přítomná. Takhle vyžaduje manuální vložení {input _token_}, což je wtf: to jméno je hardcoded v Nette a vůbec se v továrničně nepíše.

Když už si do formu protekci přidám, určitě jí chci vypsat a nechci na ní zapomenout (jinak mi form vždycky hodí formError, že). Na pozici tohohle inputu nezáleží, takže se hned za <form .. > vypsat může.

Aurielle
Člen | 1281
+
0
-

Využívám postup popsaný v tématu convectionalrenderer → 20 řádků kódu, a pokud budeš foreachem vykreslovat skrytá pole, tak to vykreslí i CSRF token: (nakolik je to kompatibilní s formulářovými makry nevím, ještě jsem nepřešel na betu)

{* hidden fields *}
<div n:foreach="$form->getComponents(TRUE, 'Nette\Forms\HiddenField') as $control">{$control->control}</div>
Mikulas Dite
Člen | 756
+
0
-

Asi si nějaký auto-output-hidden připravím, ale to co popisuju v nahoře mě stejně trápí.

Filip Procházka
Moderator | 4668
+
0
-

{/form} by měl imho volat ->render('end'), čili upravit form. makra takto:

$me->addMacro('form', '$form = $control[%node.word]; echo $form->getElementPrototype()->addAttributes(%node.array)->startTag()', 'echo $form->render(\'end\')');

Pošleš pull, nebo to mám udělat já?

Mikulas Dite
Člen | 756
+
0
-

Jo dík, to je dobré, já to chtěl dávat do 'start'. Otestoval jsem to (ne teda Nette testy) a rovnou to poslal. https://github.com/…ll/282/files

uestla
Backer | 799
+
0
-

Pak nevidím důvod, proč by otevírací makro nem(oh|ě)lo volat $form->render('begin')
Nebo resp. co přesně udělá ->addAttributes(%node.array)současné implementaci?

Děkuji předem za osvětu.

Mikulas Dite
Člen | 756
+
0
-

To by mělo přidat ty parametry, tzn. ze zápisu {form fooForm, class => orange} pochopí, že má přidat parametr class s hodnotou orange.

Edit: Když tam zůstane ten addAttributes, render begin by tam asi být mohl. Ničemu by to vadit nemělo (?).

Editoval Mikulas Dite (10. 6. 2011 21:35)

uestla
Backer | 799
+
0
-

Aha, já než se proklikám v API k tomu, co je %node.array… :-)
No záleží jak moc je dobře, že je to de-facto závislé na DefaultFormRenderu… ?

Filip Procházka
Moderator | 4668
+
0
-

Mně to přijde naprosto v pořádku.