Form::addProtection a formulářová makra

- Mikulas Dite
 - Člen | 756
 
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
 
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
 
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
 
{/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
 
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
 
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)
v současné
implementaci?
Děkuji předem za osvětu.

- Mikulas Dite
 - Člen | 756
 
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)