Při použití FormContainer a AJAXu se nepropagují data do getValues() správně…?
- honzajavorek
- Člen | 57
Mám formulář, který používá FormContainer pro sdružení několika (uživatelsky nastavitelné číslo) polí. Tento formulář odesílám AJAXem, standardně přes nette plužíny tady v extras.
Jasně je vidět, že se odesílají správná data: http://dl.dropbox.com/…desilase.png
Pokud však udělám toto:
public function formSubmitted(Form $form)
{
dump($form->getValues());die;
Tak dostanu pochroumaná data: http://dl.dropbox.com/…vypisese.png
Když nejdu přes formulář, ale vypíšu si co je v $_POST
,
tak vidím, že tam je vše správně.
public function formSubmitted(Form $form)
{
dump($_POST);die;
Vyhodí správně strukturu dat jak je odesílaná. Pokud formulář neodešlu AJAXem ale normálně, tak vše funguje taky správně. Hm. WTF?
- honzajavorek
- Člen | 57
Počet těch polí jde z GETu. Proč by to bez AJAXu fungovalo a s ním ne?
const DEFAULT_SOURCES_NUMBER = 4;
protected function getSourcesNumber()
{
$n = (int)$this->getParam('sources', self::DEFAULT_SOURCES_NUMBER);
return ($n < 1)? 1 : $n;
}
protected function createComponentForm()
{
$form = new AppForm($this, 'form');
$form->getElementPrototype()->class('ajax');
$sources = $form->addContainer('sources');
for ($i = 0; $i < $this->getSourcesNumber(); $i++) {
$sources->addTextArea($i, 'Zdroj ' . ($i + 1) . ':', 20, 10);
}
...
return $form;
}
- norbe
- Backer | 405
Když na to teď tak koukám, řekl bych že Ti nebude fungovat správně
getSourcesNumber
. Jelikož jak GET parametr, tak POST se jmenuje
sources
. A s AJAXem to nefunguje nejspíš proto, že getParam
bude mít pro něj asi jinak nastavené priority, odkud se hodnota bere
(odhaduju).
Řešením by tedy mohlo být přejmenovat GET parametr
sources
.