‚Serialization of 'Closure‘ is not allowed'
- adioverride
- Člen | 26
Ahoj,
prosím vás dostávám chybu: „Fatal error: Uncaught exception
‚Exception‘ with message ‚Serialization of 'Closure‘ is not allowed' in
[no active file]:0 Stack trace: #0 {main} thrown in [no active file] on line
0“, která se nevypíše v Tracy, ale jako plain text pod webem (funkčnost
je jinak OK).
Vytvořil jsem si třídu, ve které vracím cenu s DPH na základě zvolené měny, (kód jsem osekal kvůli přehlednosti). Myslím si, že chybu způsobí inject \Nette\Http\Request, pokud jej smažu (a logicky upravím kód, tak aby nevolal neexistující proměnnou), tak žádnou chybu nedostanu. Nicméně k httpRequest bych se rád dostal.
class CartItem extends Entity
{
/** @inject @var \Nette\Http\Request */
public $httpRequest;
/**
* @return array
*/
public function getPriceVat()
{
if ($code = $this->httpRequest->getQuery('currency')) {
....
} else {
...
}
}
}
Prosím nevíte co dělám špatně? Nebo bude chyba spíše jinde?
Díky,
A.
- David Matějka
- Moderator | 6445
mít v entitě závislosti je anti pattern. předávej si currency jako parametr getPriceVat metody
- kocourPB
- Člen | 47
Ahoj,
vidim, ze CartItem je podedene od nejakej Entity. Ak je CartItem naozaj
entitou (tzn. predstavuje nejaky jeden zaznam z DB) injectovat do nej nieco je
nespravne (bad practice). Skor by si si mal tu $currency
predat do
getPriceVat($currency) ako parameter tam odkial ju volas napr.:
class CartItem extends Entity
{
/**
* @return array
*/
public function getPriceVat($currency)
{
if ($code = $currency) {
....
} else {
...
}
}
}