Validacia iba ak bola zadana hodnota

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Dendy
Člen | 8
+
0
-

Zdravim Vas,

nemozem to nikde najst ako validovat iba ak bola zadana hodnota. Mozno som to niekde prehliadol :(

Mam jednoduchy form:

<?php
...
$form->addText("admin_email", "Správcovský  email:")
     ->addRule(Form::EMAIL, 'Zadajte email v spravnom formate') ;
...
?>

A chcem aby bolo mozne odoslat formulat bez toho aby bola polozka vyplnena. Ale ak to uzivatel vyplni, nech to zvaliduje.
Teraz to funguje tak, ze mi nedovoli odoslat prazdny formular.

Dakujem za rady.

Michal Hlávka
Člen | 190
+
+2
-

Použij metodu addCondition a nad ní zavolej teprve addRule

Dendy
Člen | 8
+
0
-

emptywall napsal(a):

Použij metodu addCondition a nad ní zavolej teprve addRule

Dakujem :)

sKopheK
Člen | 207
+
0
-

Ahoj,

mám k tomuhle doplňující dotaz – jde nějak provést, aby se podle hodnoty určitého pole (např. fyzická osoba/firma) zobrazovaly různé validační hlášky?

Unlink
Člen | 298
+
0
-

Keď používaš addRule tak druhý parameter je tá hláška čo sa vypisuje, podobne aj `setRequired `má ako parameter tú hlášku.

sKopheK
Člen | 207
+
0
-

Asi jsme se špatně pochopili, zkusím to na příkladu.
Políčko „Typ zákazníka“ může nabývat hodnot fyzická, nebo právnická osoba. Pokud je vybrána fyzická osoba, neúspěšná validace následujícího pole „Jméno“ zobrazí zprávu „Zadejte vaše jméno.“. Pokud je vybrána právnická osoba, bude při nezadaném jméně zobrazena hláška „Zadejte jméno vaší firmy.“.

CZechBoY
Člen | 3608
+
+2
-

Pokud máš jen 2 možný hodnoty tak by to šlo přes addCondition, ale lepší by asi bylo udělat vlastní validační funkci.

1. možnost addCondition

$typ = $form->addSelect('typ', ['f', 'p']);
$form->addText('name')
	->addConditionOn($typ, Form::EQUAL, 'f')
		->addRule(Form::FILLED, 'Zadejte vaše jméno')
	->addConditionOn($typ, Form::EQUAL, 'p')
		->addRule(Form::FILLED, 'Zadejte jméno firmy');

2. možnost vlastní validační funkce

$form->addSelect('typ', ['f', 'p']);
$form->addText('name');
$form->onValidate[] = [$this, 'validateName'];

function validateName(Form $form)
{
	$name = $form->getComponent('name');

	if (trim($name->getValue()) !== '') {
		return true;
	}

	$typ = $form->getComponent('typ');

	$errorMsg = 'Zadejte jméno.';
	if ($type === 'f') {
		$errorMsg = 'Zadejte vaše jméno.';
	} elseif ($typ->getValue() === 'p') {
		$errorMsg = 'Zadejte jméno firmy.';
	}
	$name->addError($errorMsg);

	return false;
}

Editoval CZechBoY (24. 4. 2016 22:37)

sKopheK
Člen | 207
+
0
-

Diky, uz me nakopli na gitteru. Sel jsem na to z druhe strany.
Nevyhodou toho druheho je, ze se bude validovat jen na serveru; nebo se pletu?

CZechBoY
Člen | 3608
+
0
-

@sKopheK
jj, je potřeba dopsat js validační funkci.
btw. Jaký je teda řešení tvýho problému?

sKopheK
Člen | 207
+
0
-

Tebou navrzene reseni c.1 (jen pouzivam setRequired). Diky