get metody v potomkovy Nette\Forms\Container
- srobowak
- Člen | 27
Zdravim, podla tohto vlakna o dedicnosti/skladani formularov som si vytvoril container, ktory obsahuje spolocne prvky pouzite vo viacerych formularoch.
Povedzme, ze kontajner obsahuje comboBox s polozkami obdobia ako „tento tyzden“, „minuly tyzden“, „tento mesiac“, atd… a ja po vybere obdobia potrebujem z formulara ziskat datum zaciatku a datum konca obdobia… existuje moznost, ako do toho containera pridat get-metody na zistenie datumu?
Chcel by som nieco ako:
$start = $form->container->startDate;
alebo
$start = $form->container->getStartDate();
… ale kedze $form->container
vracia hashedArray, tak
nemozem pristupovat k metodam kontajnera.
Alebo sa to da vyriesit nejako inak? Myslim tak, aby som mal kod na vypocet datumov len na jednom (rozumnom) mieste a aby to bolo univerzalne. Vdaka.
- ViPEr*CZ*
- Člen | 817
No v tom vlákně (jak postujete v prvním příspěvku) jak se vytváří toto:
$this['user'] = new PersonContainer();
tak Vy máte toto:
$this['some'] = new SomeContainer();
a co je pak za problém volat toto:
$startDate = $this['some']->startDate;
Editoval ViPEr*CZ* (13. 7. 2012 20:24)
- srobowak
- Člen | 27
Ja nepotrebujem volat tu metodu vo formulari ale v metode ktora ten formular spracuvava po jeho odoslani!
Priklad (definicia containera):
class SomeContainer extends Nette\Forms\Container
{
public function getStartDate()
{
return "1970-01-01";
}
}
… a pouzitie v presenteri:
protected function createComponentFilterForm()
{
$form = new Form();
$form['container'] = new SomeContainer();
$form->addSubmit('submit', 'Submit');
$form->onSuccess[] = callback($this, 'someFormSubmited');
return $form;
}
public function someFormSubmited(Form $form)
{
//tento riadok nefunguje
$start = $form->values->container["startDate"];
...
}
Dufam ze to konecne niekto pochopi :)