[BUG?] Přesouvání prvků ve formuláři

- _Martin_
 - Generous Backer | 679
 
Vážení, taky si myslíte, že následující ukázky kódu jsou funkčně totožné?
Ukázka 1
protected function createComponentMainForm($name)
{
	$form = new AppForm;
	$form->addText('name', 'Jméno:')
		->addRule(Form::FILLED, 'Vyplňte jméno');
	$container = new FormContainer;
	$control = $form['name'];
	unset($form['name']);
	$container['name'] = $control;
	unset($control);
	$form['test'] = $container;
	unset($container);
	$form->addSubmit('send', 'Odeslat');
	return $form;
}
Ukázka 2
protected function createComponentMainForm($name)
{
	$form = new AppForm($this, $name); // formulář přiřadíme k presenteru už v továrničce
	$form->addText('name', 'Jméno:')
		->addRule(Form::FILLED, 'Vyplňte jméno');
	$container = new FormContainer;
	$control = $form['name'];
	unset($form['name']);
	$container['name'] = $control;
	unset($control);
	$form['test'] = $container;
	unset($container);
	$form->addSubmit('send', 'Odeslat');
	return $form;
}
Tak bohužel. Zatímco první kód nádherně funguje, druhý nikoliv: po odeslání formuláře se přestane zohledňovat, že prvek je obsažen v kontejneru – tím pádem má zcela jiné jméno, takže si ani nenačte vyplněná data.
Zajímalo by mě, co s tím – je to bug? Nebo je to fičurka? Měl bych si dát na něco pozor? Osobně bych čekal, že se obě ukázky budou chovat identicky.
Edit:
Ono je to vůbec zvláštní: tenhle ukázkovej kód je jen takové
zjednodušení. Mám totiž vlastní formulář dědící od AppForm a ten
podobné přesouvání prvků dělá v jedné metodě. A nabízí se otázka,
v jakém místě onu metodu volat – původně jsem jí chtěl volat před
metodami render a __toString (kvůli prvnímu
vypsání formuláře) a před metodou signalReceived (po
odeslání). Bohužel, toto nefunguje (tyto metody jsou pravděpodobně
zavolány až po ukončení továrničky, kde dochází k přiřazení
formuláře do komponenty) → po odeslání se projevuje výše popsaný bug.
Sice bych mohl využít metody attached, ale potom bych zase nemohl
dále s formulářem pracovat třeba v metodě action (jakékoliv první
zavolání továrničky by provedlo změny ve struktuře formuláře pomocí té
mé metody).
Takže nevím, zda tuto metodu volat někde jinde (a kde jinde?) či jde o bug.
Napadlo mě sice řešení, ale znamenalo by to kompletní přepsání oné metody a nebylo by to vůbec triviální – navíc se bojím, aby pak taky nevykouklo podobné nemilé překvapení.
Editoval _Martin_ (27. 9. 2009 22:03)

- Honza Kuchař
 - Člen | 1662
 
To přiřazení už v továrnične sice není povinné, ale pokud se to udělá, nic se tím nezkazí. Naopak, potom můžeš využívat pokročilé funkce nových formulářů.
//Edit: Nicméně tím nevylučuji, že je to bug.
Editoval honzakuchar (28. 9. 2009 0:21)