Valiadace checkbocxů v kontejneru?

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

Ahoj,
jak udelat validace checkboxů ve form kontejneru? Potrebuji tam mit, ze alespon jeden checkbox bude zaskrtnuty. Mohl bych si na to napsat vlastni validacni callback fci, ale nevim jak se v te callback fci dostat ke kontejneru, vim jen jak se dostat k tomu form prvku, na ktery mam callback fci navesenou.

Filip Procházka
Moderator | 4668
+
0
-
// ...
$cont = $form->addContainer('cont');
$cont->addCheckbox('jedna');
$cont->addCheckbox('dva');
$cont->addCheckbox('tri');

$form->onValidate[] = function (Form $form) {
	if (!array_filter($form['cont']->values)) {
		$form->addError('Alespoň jedena volba musí být vybrána z cont.');
	}
};
Vladik_hk
Člen | 50
+
0
-

Diky moc, funguje…

bojovyletoun
Člen | 667
+
0
-

Tohle by určitě stálo za to dát do dokumentace.

zvonicek
Člen | 2
+
0
-

Ahoj, chtěl jsem tuto funkci od HosipLana použít ve svém projektu, ale skončil jsem s chybou

array_filter() expects parameter 1 to be array, object given

Jako by metoda getValues nevrátila pole, ale objekt. Neví někdo, kde může být chyba?

Filip Procházka
Moderator | 4668
+
0
-

Chyba je v tom, že formulář nově vrací místo pole objekt Nette\ArrayHash, který má v sobě hodnoty z formuláře. Stačí nahradit

if (!array_filter($form['cont']->values)) {

za

if (!array_filter((array)$form['cont']->values)) {
zvonicek
Člen | 2
+
0
-

Díky, už to opravdu funguje

joe
Člen | 313
+
0
-

A jde nějak jednoduše přes Nette udělat i klientskou validaci?

Filip Procházka
Moderator | 4668
+
0
-

ne, ale můžeš si přidat svoji funkci do

<script>
Nette.validators['Validators::funkce'] = function () { ...

A potom ve formuláři

class Validators { public static function funkce() { ...

$control->addRule('Validators::funkce', ...

Mělo by ji to pak exportovat a volat automaticky.