Nette/Forms verze 3.1.12 neodesílá formuláře

dms
Člen | 93
+
0
-

Po updatu se nám přestali odesílat formuláře. Tak jsem zjišťoval důvod a formuláře vykreslujeme takto a tento zápis v latte tam nepřidá skrytý prvek s name=do a formulář pak netrigruje žádné eventy na backendu.

<form n:name=signInForm>
	...
</form>
David Grudl
Nette Core | 8218
+
0
-

V jakém prohlížeči? A jaká verze Latte?

m.brecher
Generous Backer | 863
+
0
-

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

Už jsem na to asi přišel. Po update na Nette/Forms 3.1.12 je potřeba smazat cache Latte…

dms
Člen | 93
+
0
-

@DavidGrudl je to tak. Nějak jsem se na tom zasekl proč se ten form neodesílá až mě z toho nenapadlo smazat keš :)

m.brecher
Generous Backer | 863
+
0
-

Po smazání cache vše funguje OK :)

H0w4rd
Člen | 96
+
0
-

no, pekne jste me na tom nachytali :-/ :-\

a verze 3.1.15 je jeste horsi, pribyly tam metody, ktere mi rozbiji funkcnost :(

Infanticide0
Člen | 103
+
+4
-

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

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

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ů.

m.brecher
Generous Backer | 863
+
0
-

@H0w4rd

Od 3.1.14 problem zpusobuji pridane metody addDate(), addTime(), addDateTime(), addColor()
Uplne nam to rozbiji pouziti contributte/forms-bootstrap

Co přesně přidané metody způsobují? Popiš problém více do detailu.

Editoval m.brecher (29. 2. 12:12)