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)