ArrayHash předávání jako parametr signálu
- d3tr1tus
- Člen | 52
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
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)
- h4kuna
- Backer | 740
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
@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
d3tr1tus napsal(a):
Jinak jak se dá přetypovat ArrayHash na pole?
iterator_to_array($customerData)