ArrayHash předávání jako parametr signálu

d3tr1tus
Člen | 52
+
0
-

Ahoj,

na konci košíku mám signál pro uložení objednávky do databáze

<a href="{plink sendOrder! customerData => $customerData, products => $products}">Objednat</a>

předávám tomu 2 parametry první jsou informace o zákazníkovi a druhý objednané produkty. První parametr po dumpu je ArrayHash tak jsem to nadefinoval i v presenteru

public function handleSendOrder(\Nette\Utils\ArrayHash $customerData, array $products)

po kliknutí na signál mi to ale napíše chybu

Argument $customerData passed to App\EshopModule\Presenters\CartPresenter::handleSendOrder() must be Nette\Utils\ArrayHash, array given.

Můžete mi vysvětlit jak to mám opravit? Nechápu jak se to mohlo najednou přeměnit na klasický pole. A když jsem to zkoušel v presenteru nadefinovat jako klasický pole tak mi to napsalo

Invalid link: Argument $customerData passed to App\EshopModule\Presenters\CartPresenter::handleSendOrder() must be array, Nette\Utils\ArrayHash given.

Díky za rady :)

h4kuna
Backer | 740
+
0
-

Nevím o tom že by handle uměl přijmout ArrayHash. Jak jsi to kontroloval? Protože to co říkáš se neshoduje s těmi chybami. V handle vymaž parametry, a dumpni co jde na server, toto dej do těla handle

public function handleSendOrder()
{
    dump($this->getParameters());
    exit;
}

A pošli výstup.

Editoval h4kuna (9. 3. 2018 11:53)

d3tr1tus
Člen | 52
+
0
-

@h4kuna Dumpne to

array (2)
action => "review" (6)
do => "sendOrder" (9)
d3tr1tus
Člen | 52
+
0
-

Tohle dumpne latte

$customerData
Nette\Utils\ArrayHash

takže to existuje jako ArrayHash ale signál to umí zpracovat jen jako pole?

h4kuna
Backer | 740
+
0
-

Proč vlastně předáváš customerData? Když už je máš na serveru, mohl by jsi je uložit do session a neposílat je pomocí signálu přes get. To samý seznam produktů (proměnná products).

Celý to je asi nákupní košík, že?

Jinak zpátky, nevím z hlavy jestli ArrayHash se zpracuje jako pole a správně se přidá do url. Nicméně není vidět struktura toho ArrayHash, pokud by byla jednoúrovňová, tak není problém ji přetypovat na pole, pokud je více úrovňová tak to nebude fungovat.

d3tr1tus
Člen | 52
+
0
-

@h4kuna ajo máš pravdu. Já uplně zapomněl, že mám už uložený vše v session podle toho jak zákazník prochází košíkem.

Je to celý nákupní košík.

Teď už to vše funguje jak má jen mi to nechtělo vzít parameter jako ArrayHash :)

Jinak jak se dá přetypovat ArrayHash na pole? Do budoucna bych to rád věděl. Tohle je bohužel víceúrovňové takže tady to nevyužiju.

Díky moc za radu!

petr.pavel
Člen | 535
+
0
-

d3tr1tus napsal(a):
Jinak jak se dá přetypovat ArrayHash na pole?

iterator_to_array($customerData)

d3tr1tus
Člen | 52
+
0
-

Díky moc! :) @petr.pavel

David Grudl
Nette Core | 8110
+
0
-

Nebo (array) $customerData

d3tr1tus
Člen | 52
+
0
-

David Grudl napsal(a):

Nebo (array) $customerData

děkuji :)