FormControl::__toString()
- Majkl578
- Moderator | 1364
Zdravím,
momentálně poměrně často pracuji s formuláři ve spojení s vlastní
validací přes callbacky na model (pro představu například zda není email
registrován). Nyní to řeším v příslušné validační
metodě takto:
$email = $email instanceof FormControl ? $email->getValue() : $email;
a následně použiji v dibi.
je ale celkem otrava psát to několikrát v různých metodách, proto bych rád navrhl přidání metody __toString() pod FormControl, která by vracela hodnotu:
public function __toString()
{
return $this->getValue();
}
Šlo by to? ;)
Editoval Majkl578 (9. 10. 2009 8:49)
- Honza Kuchař
- Člen | 1662
tak tohle je dilema. Obsah x render. popravde jsem spise pro ten value. a to protoze renderovat label nebo control? tohle by mel podle me mit na starost az render.
- DocX
- Člen | 154
Tak vždycyk si můžeš udělat něco jako
<?php
class Tools
{
function GetString($object)
{
return $object instanceof FormControl ? $object->getValue() : $object;
}
}
?>
a pak volat jen Tools::GetString($email)
;)
Otázka je, jestli je to zlechčení práce :D Ale pokud bys to potřeboval u více různých objektů, můžeš funkci rozšířit o rozpoznávání toho, o co jde a pak už by to asi práci usnadnilo :)
- Honza Kuchař
- Člen | 1662
Jo to je pravda, ale zpět k tomu __toString()
.
Teď jsem nad tím přemýšlel, ale __toString()
by stejně
nepomohlo. Říkal jsem si, že by to zkrátilo zápis v nových
formulářích.
if($form["neco"]->value === "test") {
// Bla bla bla
}
// na
if($form["neco"] === "test") { // Ale to je blbost, protože to by srovnalo ten původní objekt
// Bla bla bla
}
// a tohle by mělo velký wtf faktor (a mimochodem by to nic neulehčilo):
if((string)$form["neco"] === "test") {
// Bla bla bla
}
Tzn. vracet value je opravdu blbost. Renderovat control?
- kravčo
- Člen | 721
Podľa mňa je jediné čo dáva zmysel renderovanie. Tak ako používame
echo $form
, v podobnom duchu by mali fungovať i prvky, t.j.
echo $form['date']
. Avšak volanie echo $form
znamená
zhruba:
try {
echo $form->renderer->render($form);
} catch (Exception $e) {
echo '';
}
Ak by sme chceli zaviesť takúto funkcionalitu i na úrovni prvku (ja osobne si myslím, že nie je potrebná), znamenalo by to potrebu rozhrania IFormControlRenderer + ďalších vecí. Už dávnejšie David naznačil, že napr. taký ConventionalRenderer – akokoľvek je dobrý – nedokáže poňať rôzne požiadavky každého z nás a zrejme časom umrie v prospech 20 riadkov kódu.