addConditionOn – něco jako OR
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- i.magine
- Člen | 81
Klasická situace – mám formulář u změny profilu… dá se změnit email, osobní údaje a pak je tam skupina změnit heslo a tam bych chtěl, že když někdo vyplní cokoliv do políčka Staré heslo, Nové heslo a Nové heslo znovu aby se spustila validace toho hesla, jinak bych to nechal projít a upravil jenom ostatní údaje. Abych jenom neplácal tady je kód co zatím mám:
$form->addPassword('password_old', 'Staré heslo:');
$form->addPassword('password', 'Nové heslo:')
->addConditionOn($form["password_old"], Form::FILLED)
//Ted je to jako AND ale ja bych prave potreboval OR - takze kdyz bude tohle pole, nebo pole Stare heslo vyplněné, aby se zvalidovala celá skupina.
->addCondition(Form::FILLED)
->addRule(Form::MIN_LENGTH, 'Heslo musí být minimálně %d znaků dlouhé', 6)
->addRule(Form::MAX_LENGTH, 'Heslo musí být maximálně %d znaků dlouhé', 30);
$form->addPassword('password_again', 'Nové heslo znovu:')
->addConditionOn($form["password"], Form::FILLED)
->addRule(Form::EQUAL, 'Hesla nejsou stejná', $form["password"]);
Díky za pomoc
- Ondřej Mirtes
- Člen | 1536
IMHO ti pomůže:
$form->addPassword('password', 'Nové heslo:')
->addConditionOn($form["password_old"], Form::FILLED)
->addRule(Form::MIN_LENGTH, 'Heslo musí být minimálně %d znaků dlouhé', 6)
->addRule(Form::MAX_LENGTH, 'Heslo musí být maximálně %d znaků dlouhé', 30);
$form['password']->addCondition(Form::FILLED)
->addRule(Form::MIN_LENGTH, 'Heslo musí být minimálně %d znaků dlouhé', 6)
->addRule(Form::MAX_LENGTH, 'Heslo musí být maximálně %d znaků dlouhé', 30);
- Ondřej Mirtes
- Člen | 1536
Tak můžeš si ty stringy a čísla definovat někde výš v proměnné, abys je mohl měnit na jednom místě, ale celkově to žádná prasárna není. Fluent interface je jen taková pomůcka, na vytáhnutí pole pomocí $form[‚password‘] a doplnění pravidel není nic špatného.