AddCondition – vlastní validace

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

Zdravím a prosím o radu, co dělám blbě:

Mám form

protected function createComponentForm() {
...
$form->addSelect('it_locations_id', 'Umístění:', $this->getPresenter()->getLocationsForForm())->setPrompt('Zvolte')->setRequired('Zadejte umístění')->setOption('id', 'it_locations_id');
$form->addSelect('it_devices_types_id', 'Typ:', $this->getPresenter()->getDevicesTypesForForm())->setPrompt('Zvolte')->setRequired('Zadejte typ')
	->addCondition($this->checkComponent, TRUE)->toggle('it_locations_id');
...
}

a validační funkci

function checkComponent($item, $arg) {
	    return TRUE;
}

Ať vracím ve validační funkci cokoliv, toogle nic neskryje ani nezobrazi..
Dělám to špatně?

Díky!

David Matějka
Moderator | 6445
+
0
-

nette forms v zakladu „prepisuje“ validacni pravidla pro built-in validace (tzn equals, min…). u vlastnich validaci:

  1. pokud je to staticka funkce, tak napsat JS variantu dle https://doc.nette.org/cs/forms#…
  2. pokud je to metoda na objektu, tak to snadno nejde (nette je pri exportu do JS ignoruje)
MW
Člen | 615
+
0
-

No potřebuji si sahnout do DB a ověřit typ a na zakladě toho pole skryt/zobrazit..

Toto by mě mohlo asi vyřešit problém.. Je to ok? Tvaři se to fuknčně, jen jestli tam nemám nějakou zásadní botu :)

Ta funkce mě vrátí pole potřebných typu a já jen ověřuji IN a pokud se pole zobrazí, musí byt required.

$form->addSelect('it_devices_types_id', 'Typ:', $this->getPresenter()->getDevicesTypesForForm())->setPrompt('Zvolte')->setRequired('Zadejte typ')
		->addCondition($form::IS_IN, $this->getComponentsTypes())->toggle('it_locations_id');
$form->addSelect('it_locations_id', 'Umístění:', $this->getPresenter()->getLocationsForForm())->setPrompt('Zvolte')->setOption('id', 'it_locations_id')
		->addConditionOn($form['it_devices_types_id'],$form::IS_IN, $this->getComponentsTypes())->toggle('it_locations_id')
		->setRequired('Zadejte umístění');