(control)->addFilter() nefunguje na prázdném prvku?

Odo
Člen | 48
+
0
-

Ahoj všem,

narazil jsem na to, že když mám $form->addText(...)->addFilter(...), tak pokud je hodnota input '', addFilter se vůbec nezavolá. To je záměrné chování?

Moje zamýšlené použití je nahradit prázdný vstup datepickeru aktuálním datem.
Zkoušel jsem si hrát s jQuery, ale nevím, kam navěsit event, abych nezprasil validaci formuláře a filtr se zavolal až před skutečným odesláním dat (formulář odesílám AJAXem z Bootstrap Modal dialogu). Přes addFilter() mě to přijde jako nejčistší řešení.

Zatím to řeším ve xxxFormSucceeded(), což je otrava, protože to musím u každého formuláře zapsat ručně.

(Nette 2.4)

Editoval Odo (10. 4. 2020 17:42)

CZechBoY
Člen | 3608
+
0
-

Co nastavit default value inputu, případně nastavit prvek jako required?

Odo
Člen | 48
+
0
-

Uživatel nezadá datum → nastaví se aktuální datum, tj. required nelze. Default value by sice šlo, ale zase čas odeslání formuláře může být o dost později než otevření :)

Editoval Odo (10. 4. 2020 22:24)

Odo
Člen | 48
+
+3
-

Tak jsem na to přišel. Pokud by to někoho zajímalo:

<?php
  $form->add...(...)
    ->addCondition($form::BLANK)
      ->addFilter(function($value) {
        // zavolá se pouze při prázdné hodnotě
      })
    ->endCondition()
    ->addFilter(function($value) {
      // zavolá se pouze při neprázdné hodnotě - kvůli setRequired(false)
    })
    ->setRequired(false);

?>

Editoval Odo (15. 4. 2020 16:27)