myValidator

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

Je nějak možné, aby se mi do myValidator()u předávala pouze hodnota daného FormControlu, místo celého? Abych pak nemusel volat $item->getValue(). Jasně, můžu to obejít, jde mi o to, jestli se to třeba nedá někde rovnou nastavit.

Honza Marek
Člen | 1664
+
0
-

Proč?

Ondřej Brejla
Člen | 746
+
0
-

Protože celý FormControl nepotřebuju. A pokud bych tu fci používal i k jiné kontrole (ne jen na prvku formu, ale v jiném kontextu), tak jí předávám rovnou třeba string. Nemusím pak kontrolovat, jestli jsem FormControl nebo ne a případně si sahat pro value. Není problém to pořešit tak jak to je, jen mě zajímá, jestli to třeba nejde…

Edit: Jestli se třeba getValue() nevolá při přetypování na string? Hledal jsem a nenašel.

Editoval Warden (15. 7. 2009 16:10)

Honza Marek
Člen | 1664
+
0
-

Nejde. Při přetypování na string se getValue nevolá.

Jod
Člen | 701
+
0
-

No, ale vezmi si že napríklad danú hodnotu potrebuješ použiť aj s inou z formulára.
Potom sa také $input->form->values[‚xxx‘]; určite zíde.
Mne napríklad určite, lebo to používam :))) A na model si napríklad robím wrapprovaciu metódu. Niečo takéto:

<?php
function formValidateUsername($input)
{
	$this->model->validate('username', $input->value, $this->getParam('id'));
}
?>

Či ti to dá vela námahy písať ? :D

Ondřej Brejla
Člen | 746
+
0
-

Honza M. napsal(a):

Nejde. Při přetypování na string se getValue nevolá.

To sem si myslel…:) Škoda je to ;)

Jod napsal(a):

Já právě zas v podstatě pořád používám jen tu jednu hodnotu, takže pořád píšu $blabla->getValue() a to mi neba, líbilo by se mi nějaké přepínátko kdesi…:) A nebo volání getValue() při string přetypování :) To by bylo taky krásné :)

Editoval Warden (15. 7. 2009 16:57)

Jod
Člen | 701
+
0
-

Aha, no to hej. Tak si môžeš v BaseModeli spraviť metódu typu:

<?php
function formatValue($value)
{
	if($value instanceOf IFormControl) {
		return $value->value;
	}
	elseif(is_object($value) || is_array($value)) {
		throw new InvalidArgumentException();
	}
	else return $value;
}
?>

a potom to v modeli volat na jednom riadku.
Inak ma asi nenapadá.
Môžeš dať feature request na Davida :)

Ondřej Brejla
Člen | 746
+
0
-

Takhle to teď v podstatě řeším, ale nelíbí se mi to :) Zbytečně komplikované…a je tam ten řádek navíc ;) Asi by to chtělo Feature requestík mno :)

David Grudl
Nette Core | 8227
+
0
-

Takhle věc se stejně musí nějak systémově vyřešit, protože na ní visí validace na straně modelu.

Jod
Člen | 701
+
0
-

Čo tak ako prvé poslať hodnotu a druhý parameter by bol IFormControl?
Aj keď pri udalostiach by mal byť prvý parameter sender.
Alebo dať do addRule ešte volitelný parameter, či sa má posielať čistá hodnota prvku a nie prvok samotný, to by to asi vyriešilo.

Editoval Jod (15. 7. 2009 19:16)