násobná ověřovací podmínka u formuláře

vlkodlak
Člen | 160
+
0
-

Zdravím

u formuláře mám potřebu nastavit dvě podmínky pro ověřeni zadané hodnoty … nedaří se vymyslet správný zápis podmínky

$form			 = new \Nette\Application\UI\Form;
$form->addtext('employee');
$form->addtext('week');
$form->addtext('day1')
	      ->addConditionon($form::FLOAT)
	      ->addRule($form::RANGE, [1, 25]);
$form->addtext('day1desc');
	      ->addConditionon($form['day1'], $form::FILLED, true)
	      ->setRequired()
$form->addSubmit('send', 'Show Timesheet');
$form->onSuccess[]	 = [$this, 'formSuccessTimesheetModal'];
$form->renderer;
return $form;

konkrétně u pole DAY1 potřebují nastavit, že je to číslo a je v rozmezí 1–25
a pokud vyplním pole DAY1 vyžádat doplnění hodnoty u DAY1DESC

Editoval vlkodlak (26. 3. 2021 18:00)

Šaman
Člen | 2635
+
0
-
$day1Input = $form->addtext('day1');
$day1Input->addRule(); // jedno pravidlo
$day1Input->addRule(); // jiné pravidlo

Edit: I když ty přece nepotřebuješ obě podmínky navěsit na tenhle input. Popsal jsi dvě podmínky na dva různé inputy, v čem je problém? (Kromě chybějícího středníku, což je předpokládám jen věc vykopírování kódu do fóra.)

Dodatek: A u toho prvniho inputu má být addCondition, nikoliv addConditionOn.

Editoval Šaman (26. 3. 2021 19:41)

vlkodlak
Člen | 160
+
0
-

Šaman napsal(a):

$day1Input = $form->addtext('day1');
$day1Input->addRule(); // jedno pravidlo
$day1Input->addRule(); // jiné pravidlo

Edit: I když ty přece nepotřebuješ obě podmínky navěsit na tenhle input. Popsal jsi dvě podmínky na dva různé inputy, v čem je problém? (Kromě chybějícího středníku, což je předpokládám jen věc vykopírování kódu do fóra.)

Dodatek: A u toho prvniho inputu má být addCondition, nikoliv addConditionOn.

promiň, trochu nechápu / nemam zkušenost, jak se pak proměnou $day1Input zapojím do formuláře, aby obě přidaná pravidla obsloužil formulář?

add edit: jde mi o to, že bych rád dosáhl stavu, abych ověřil vloženi čísla a v rozsahu mezi 1–24 u pole day1 a separátně při správném vyplnění day1 vyžádal vyplnění pole day1desc

Šaman
Člen | 2635
+
+1
-
  1. Nijak. Na prvním řádku mého kódu si pojmenuješ ten input (který se zároveň vytvořil). Na dalších řádcích na něj navěšuješ pravidla. Prostě metoda addXxx vrací přímo novou a připojenou instanci inputu, jinak by nebylo možné na to dál navěšovat addRule apod. Tady se to jen neudělá na jediném řádku, ale na více.
  2. Od oka stejně, jak to máš. To druhé pravidlo se vztahuje na day1desc a tak je navěšené na něj. Ale chybně máš to první. Tam má být addCondition a vlastně je myslím úplně zbytečný. Stačí to range, ne? (addCondition se vztahuje k tomuto prvku. addConditionOn se vztahuje k jinému prvku, který musí být v parametru uveden. Tak, jak to máš u day1desc)
Polki
Člen | 553
+
+2
-
$form->addText('day1')
	      ->addRule($form::FLOAT, 'Zadaná hodnota musí být číslo')
	      ->addRule($form::RANGE, 'Zadaná hodnota musí být v rozmezí od %d do %d', [1, 25]);
$form->addText('day1desc')
	      ->addConditionOn($form['day1'], $form::FILLED)
	      ->setRequired('Povinné pole');

CopyPastni