Validace v zavislosti na jinem elementu

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

Zkousel jsem nastavit validaci elementu, ktery je zavysly na jinem. Podle navodu na Zdrojaku to jde. Mam vsechny formulare udelane jako object rozsireny o Forms. Uvnitr objektu ale uz nevim, jak se k elementu, ktery urcuje podminku dostat.

Poradite mi?

<?php
final class Backend_UserProfileForm extends Form
{
	public function __construct($name, $parent = null)
	{
		parent::__construct($name, $parent);
	        $this->addCheckbox('keepPassword', 'Ponechat heslo bez změny')
			->setValue(true);

	        $this->addPassword('oldPassword', 'Původní heslo')
			->addConditionOn($this->getComponent('keepPassword'), Form::EQUAL, true)
			->addRule(Form::FILLED, 'Původní heslo musí být vyplněno.');
}
?>
PetrP
Člen | 587
+
0
-

Nerozumím kde přesně je problém, podle textu asi v $this->getComponent('keepPassword') což by mělo fungovat skus ale zápis $this['keepPassword']

Jinak mimo tvuj problém: nebylo by lepší zrusit keepPassword a o tom jestli změnit/ponechat heslo, rozhodovat podle toho jestli je vyplněno

hurvajs
Člen | 86
+
0
-

To getComponent() jsem uz opravil (na zaklade jineho threadu). Nenapadlo me pouzit $this.

No ja bych chtel dosahnout toho, ze tam prave bude checkbox (defaultne zaskrtnuty), a po jeho odstrtnuti se zobrazazi 3 skryte text inputy
* s puvodnim heslem,
* s novym heslem,
* a s overenim.

Jen nevim, jak pridat do renderedu ohraniceni DIVem potrebnych elementu, abych je mohl pres CSS schovat. Chtel bych prave vynutit aby clovek musel zadat puvodni heslo a nove.

I kdyz to co pises by urcite stacilo.

PetrP
Člen | 587
+
0
-
		$this->addCheckbox('keepPassword', 'Ponechat heslo bez změny')
			->setValue(true);
		$this->addPassword('oldPassword', 'Původní heslo')
			->addConditionOn($this->getComponent('keepPassword'), Form::EQUAL, true)
				->addRule(Form::FILLED, 'Původní heslo musí být vyplněno.');

		$this->addPassword('newPassword', 'Nové heslo')
			->addConditionOn($form->getComponent('keepPassword'), Form::EQUAL, true)
				->addRule(Form::FILLED, 'Nové heslo musí být vyplněno.');

		$this['keepPassword']
			->addCondition(Form::EQUAL, false)
				->toggle('oldPassword')
				->toggle('newPassword');

		$this['oldPassword']
			->setOption('id', 'oldPassword');
		$this['newPassword']
			->setOption('id', 'newPassword');