Životoní cyklus vlastní formulářové komponenty – best practice

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ot@s
Backer | 476
+
0
-

Poprosím vás o radu/y, jak hygienicky řešit následující. Mám vlastní formulářovou komponentu, viz její strukura:

class MujTyp extends \Nette\Object
{
	public $a; // string
	public $b; // string
	public $c; // string
}

a definici samotné form. komponenty:

class MujInput extends \Nette\Forms\Controls\TextInput
{
	public function __construct($label=NULL, $cols=NULL, $maxLength=NULL)
	{
		parent::__construct($label, $cols, $maxLength);
		$this->value = new MujTyp();
	}
// ... vlastni metody setValue, getControl, atd....
}

A ted ty otázky:

  • obecně návrh definice objektu form.komponenty (dědit z \Nette\Forms\Controls\TextInput nebo z \Nette\Forms\Controls\BaseControl)
  • jak řešít naplnění hodnot via $form->setDefaults() (tj. z BB dostanu pole, kde jsou součástí i ony $a, $b a $c z MujTyp)
  • jak řešit ukládání do DB (resp. přednachystání do pole pro uložení)

Podotýkám, že výše uvedené mám „jaksi“ vyřešené, nicméně z toho nemám vůbec dobrý pocit. :-(
Jde mi o ty best practices ideálně formou ukázky. Díky za jakékoli nasměrování.

Editoval Ot@s (2. 8. 2011 9:08)

Nox
Člen | 378
+
0
-
  1. Pokud to má být v podstatě text input, tak asi z TextInput a jinak BaseControl
  2. Napsat pro MujTyp nějakou formu serializace, string reprezentace té skupiny hodnot – toto nemá řešit cizí prvek
  3. Jestli myslíš jeho výstup – asi bych dal return new MujTyp($serializovanaHodnota) a MujTyp by si to deserializoval (doufám že nemyslíš to že by to ten input sám ukládal do DB)

Inspirace třeba na http://www.doctrine-project.org/…mapping.html#…

Editoval Nox (2. 8. 2011 10:12)