FormContainer::setValues(), podpora pro vnořené potomky třídy FormContainer s přepsanou metodou setValues()

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

Demonstruju na příkladu: mám třídu DateTimeContainer potomka FormContainer, který obsahuje 2 formulářové pole (input pro datum a čas). Překrývám metodu setValues následujícím způsobem:

	public function setValues($values, $erase = FALSE)
	{
		if (is_array($values))
		{
			return parent::setValues($values, $erase);
		}
		else
		{
			$dateTime = new DateTime53((string) $values);
			$this->getDateInput()->setValue($dateTime->format('d.m.Y'));
			$this->getTimeInput()->setValue($dateTime->format('H:i'));
			return $this;
		}
	}

S tím, že naplnění formu by fungovalo jak z db (kde se datum ukládá do jednoho datetime sloupce) tak z http requestu (v post datech dostaneme array).
Bohužel implementace FormContainer::setValues() neodlišuje případ, kdy potomek je opět instance FormContainer (metodu překrývá) a naplnění všech vnořených IFormControl řeší sama…

jtousek
Člen | 951
+
0
-

WTF?! Mohl bys objasnit, k čemu ta třída DateTimeContainer má sloužit? Možná mi něco uniká, ale připadá mi to jako nesmysl.

Jo a místo /--code použij /--php kvůli zvýrazňování syntaxe.

hrach
Člen | 1838
+
0
-

jtousek: kdo videl nekdy cakephp, tak tusi … tam to bylo taky rozdeleny do vice vstupnich poli ;) proste tim resi datetimepicker ;)

Filip Procházka
Moderator | 4668
+
0
-

Poděď si Nette\Forms\FormControl a né Nette\Forms\FromContainer, jde to snadno, jenom upravíš pár metod :)

Editoval HosipLan (11. 2. 2011 8:33)

jtousek
Člen | 951
+
0
-

HosipLan: Já říkal, že mi něco uniká. XD Takhle už to smysl dává. :)