Validace formuláře více podmínkami

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

Ahoj,

nějak mi zlobí validace formuláře. Mám zde 2× tři selecty, kde každá trojice je závislá na vybraném RadioListu. Pro danou trojici chci, aby platilo pravidlo: Pokud je daný select vybraný, tak se nesmí rovnat ostatním v dané sekci. Napsal jsem si na to metodu:

	private function myValidator(RadioList $rl,$val, SelectBox $a, SelectBox $b, SelectBox $c, $msg){
		$a->addConditionOn($rl, Form::EQUAL,$val)
			->addCondition(Form::FILLED)
			->addRule(Form::NOT_EQUAL,$msg, $b )
			->addRule(Form::NOT_EQUAL,$msg, $c );
	}

Ta na straně klienta funguje správně, ale na straně serveru mi to při dvou nevyplněných selectech vrací chybobou hlášku. Nevíte prosím čím by to mohlo být?

Díky Chap

Felix
Nette Core | 1270
+
0
-

Rad bych ti poradil, ale uplne tomu nerozumim. Resp. chapu tvuj point. Ale muzes sem hodit cely formular a registraci validatoru?

A zkousel jsi rucne napsat ty pravidla, jestli ti to funguje?

chap
Člen | 81
+
0
-

Ahoj,
no jedna se formular pro zadavani stazi (pracovni a studini). Zadatel musi vybrat co chce a podle toho se mu zobrazi tri volby zavisle na tom vyberu staze. Ty tri volby jsou vsechny nepovinne ale je podminka, ze pokud je vyplnena, tak nesmi byt rovna jine take vyplnene. Pak jsem tam jeste chtel pridat podminku, aby byla alespon jedna volba vyplnena. Nakonec jsem to vyresil na strane serveru „rucni validaci“. Ale stejne by me zajimalo, co jsem tam mel za botu. Cast formulare s danymi prvku tu:

class VyberForm extends MyBaseForm{
....
public function init(Form $form) {
        $t = "Vyberte prosím tři ruzné státy";
        $ts = "Vyberte prosím tři ruzné školy";

        $rl = $form->addRadioList("mobility_type", "Typ vyjezdku",["Prace","Studium"])->setDefaultValue(1);
        $rl->addCondition(Form::EQUAL, 0)
                ->toggle("pracovnistaz")
                ->elseCondition()
                ->toggle("studijnistaz")
                ->endCondition();

        $form->addGroup("Pracovní stáže")->setOption("id", "pracovnistaz");
        $gp = $form->addContainer("prace");
        $gp->addSelect("w1", "Prac 1", $this->staty) ;
        $gp->addSelect("w2", "Prac 2", $this->staty);
        $gp->addSelect("w3", "Prac 3", $this->staty);

		$this->myValidator($rl, 0, $gp["w1"], $gp["w2"], $gp["w3"], $t);
		$this->myValidator($rl, 0, $gp["w2"], $gp["w1"], $gp["w3"], $t);
		$this->myValidator($rl, 0, $gp["w3"], $gp["w2"], $gp["w1"], $t);

        $form->addGroup("Studijní stáže")->setOption("id", "studijnistaz");
		$gs = $form->addContainer("studium");
        $gs->addSelect("e1", "Skola 1", $this->skoly);
        $gs->addSelect("e2", "Skola 2", $this->skoly);
        $gs->addSelect("e3", "Skola 3", $this->skoly);

		$this->myValidator($rl, 1, $gs["e1"], $gs["e2"], $gs["e3"], $ts);
		$this->myValidator($rl, 1, $gs["e2"], $gs["e1"], $gs["e3"], $ts);
		$this->myValidator($rl, 1, $gs["e3"], $gs["e2"], $gs["e1"], $ts);
}


private function myValidator(RadioList $rl,$val, SelectBox $a, SelectBox $b, SelectBox $c, $msg){
	$a->addConditionOn($rl, Form::EQUAL,$val)
		->addCondition(Form::FILLED)
		->addRule(Form::NOT_EQUAL,$msg, $b )
		->addRule(Form::NOT_EQUAL,$msg, $c );
}

}