Jak ve formuláři předat pole hodnot?

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

Představte si, že máte ve formuláři toto:

<input type="text" name="items[title][x]" value="1">
<input type="text" name="items[title][y]" value="2">

a v metodě zpracovávající tento forulář chcete tyto hodnoty získat jako pole. Klasicky by se k tomu v PHP dalo přistoupit takto že?

$x = $_POST['items']['title']['x'];
$y = $_POST['items']['title']['y'];

Nette myslím umožňuje si tyto hodnoty vyzvednout takto:

$array = $form->getHttpData($form::DATA_KEYS, 'items');

Ovšem to vyhodí ‚Nette\InvalidArgumentException – Unknown data type‘.

petr.jirous
Člen | 128
+
0
-

Zkus to takto:

$array = $form->getHttpData($form::DATA_TEXT, 'items[title][]');
pecan987
Člen | 1
+
0
-

V šabloně vypisuji do formuláře inputy podle údajů z db ve formátu items[x][y], ale když se je snažím načíst pomocí

$array = $form->getHttpData($form::DATA_TEXT, 'items[]');

tak dostanu prázdné pole. Pokud bych se spokojil s tím, že musím napsat ten první klíč pole a načítat je takto:

$array = $form->getHttpData($form::DATA_TEXT, 'items[x][]');

Tak sice dostanu pole, ale potřeboval bych ho i s originálními klíči z formuláře, teď mi to vrátí pole s klíči 0,1,2 …

Dá se to nějak jednoduše provést? Díky za radu.

Edit: odpovím si sám, původní klíče dostanu takto:

$form->getHttpData($form::DATA_TEXT | $form::DATA_KEYS,'items[x][]');

Editoval pecan987 (9. 12. 2014 10:29)

boob
Člen | 21
+
0
-

Doplnim tento topic otazkou:

Je mozne zapisat nejako, ked mam viacrozmerne pole ako je napriklad to items[x][], ale to x mam tiez dynamicke? Teda napriklad:

<input type="text" name="items[0][title]">
<input type="text" name="items[0][price]">
<input type="text" name="items[1][title]">
<input type="text" name="items[1][price]">

Pretoze neviem, kolko ich tam bude a potom neviem napriklad pri spracovavani formulara spravit nejaky cyklud a volat

$form->getHttpData($form::DATA_TEXT | $form::DATA_KEYS, "items[{$index}][]");