Nette/Forms verze 3.1.12 neodesílá formuláře
- m.brecher
- Generous Backer | 863
Používám pro šablony formulářů syntaxi s tagem {form} a ten v poslední verzi Nette/Forms 3.1.12 po krátkém testování funguje v pořádku.
Zkusil jsem tedy syntax kterou používá @dms:
<form n:name="MyForm">
...
</form>
a opravdu – do výstupního html se nevykreslí systémový prvek formuláře:
<input type="hidden" name="_do" value="myForm-form-submit">
a submit formuláře pak následně nefunguje.
@DavidGrudl: Zjistil jsem ještě další chybu. Formuláře vykresluji univerzální latte šablonou, do které se includují latte šablony jednotlivých formulářových inputů. Inputy mají nastaveny univerzální css třídy, které nastavuji v univerzální factory formuláře. Tyto css třídy se při použití syntaxe s {form} vykreslují bez chyby, ale při použití syntaxe s <form n:name=„MyForm“> se nevykreslí vůbec.
Ukázka kódu ve kterém k této chybě došlo:
Form factory:
class FormFactory
{
private function addStyle(BaseForm $form)
{
foreach ($form->getComponents(deep: true) as $component){
if($component instanceof BaseControl){
$class = $component->getControl()->getAttribute('class');
$class .= $class ? ' ' : '';
$class .= match($component->getOption('type')){
'text', => 'text-input block-input', // tyto classy se nevykreslí !!
// ......
};
// .....
$component->setHtmlAttribute('class', $class);
}
}
}
// ....
}
Univerzální latte šablona formuláře:
{form 'form', class: 'base-form'}
{* ..... *}
{foreach $form->getInputs() as $input}
{include block $inputBlock, input: $input, printLabels: $printLabels}
{* ..... *}
{/foreach}
{* ..... *}
{/form}
příklad šablony inputu:
{block 'textinput'}
{* ..... *}
<td>
{input $input}
</td>
{/block}
Uvedený kód funguje bez problémů, chyba se projeví pouze jak píše @dms ve verzi nette/forms 3.1.12 při použití syntaxe <form…>
Prohlížeč: Google Chrome, latte/latte: 3.0.6
Editoval m.brecher (10. 10. 2023 17:08)
- David Grudl
- Nette Core | 8218
Už jsem na to asi přišel. Po update na Nette/Forms 3.1.12 je potřeba smazat cache Latte…
- Infanticide0
- Člen | 103
@H0w4rd
Potřebuješ být víc konkrétní. Tohle fňuknutí do fóra ti nepomůže nic vyřešit.
- H0w4rd
- Člen | 96
Jde o to, ze po updatu na nette/forms 3.1.12 se musi smazat nette cache,
pokud se to neudela, formulare se tvari jako kdyz se neodesilaji. Na nejakou
dobu jsem se na tom zaseknul.
Od 3.1.14 problem zpusobuji pridane metody addDate(), addTime(), addDateTime(),
addColor()
Uplne nam to rozbiji pouziti contributte/forms-bootstrap,
viz https://github.com/…ap/issues/86
Jsem zvedavy, jak to vyresi.
Editoval H0w4rd (29. 2. 11:33)
- Pavel Kravčík
- Člen | 1194
Po každém update/deploy je dobré přidat automatický purge cache.
My jsme měli také vlastní inputy addDate v rendereru, které nebyly
kompatibilní s 3.1.14. Prostě pošli PR, kde se to opraví. Jiné řešení
to stejně nemá. Plus pozor na trochu odlišné chování nullable
u těch datumů.