get metody v potomkovy Nette\Forms\Container

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

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.

Jan Mikeš
Člen | 771
+
0
-
$start = $form->container["startDate"];
srobowak
Člen | 27
+
0
-

ked to napisem tak, tak dostanem: PHP Notice: Undefined property: Nette\ArrayHash::$startDate

metodu mam zadefinovanu takto:

class SomeContainer extends Nette\Forms\Container
{
	public function getStartDate()
	{
		return "1970-01-01";
	}
}
Jan Mikeš
Člen | 771
+
0
-

Tak ted vubec nechapu co chces :) chces ve formulari volat tu metodu?

ViPEr*CZ*
Člen | 817
+
0
-

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
+
0
-

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 :)

ViPEr*CZ*
Člen | 817
+
0
-

No protože by to mělo být takhle jestli se nepletu:

public function someFormSubmited(Form $form)
{
        //tento riadok nefunguje
        //$start = $form->values->container["startDate"];
        $start = $form['some']->startDate;

        ...
}
srobowak
Člen | 27
+
0
-

jasne uz funguje… dik :)

ViPEr*CZ*
Člen | 817
+
0
-

srobowak napsal(a):

jasne uz funguje… dik :)

No to je jasné… myslel jsem si to :-) Ono kdyby jste si komplet tu komponentu vyrobil jako extra třídu a necpal to celé do Presenteru, tak by Vám to bylo jasné už z toho co jsem psal před tím.