Kdyby/Doctrine – PHP_Incomplete_Class has no unserializer

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
d@rkWolf
Člen | 167
+
0
-

Je to sice Doctrine, ale na Kdyby fóru se kdysi ptal kolega a nepřišla žádná odpověď, tak to zkusím.

Máme systém, který jede na postarším Nette 2.2.7 a využívá jako ORM Doctrine(verze by měla být 2.3.1), nejsem autorem, jen to na mě zbylo, každopádně systém běží u více zákazníků a u všech produkuje tuto chybu(spammuje nám to email na sbírání chyb a ztrácí se v tom případné jiné chyby, tak mi to dost štve):

[2017–01–17 11–22–11] PHP Warning: Class __PHP_Incomplete_Class has no unserializer in /…/vendor/kdyby/doctrine/src/Kdyby/Doctrine/Entities/SerializableMixin.php:98 @ …/uzivatel/

Mění se url, na kterém se to zaloguje.

Nebo:

[2016–12–20 14–15–42] Nette\InvalidStateException: Class __PHP_Incomplete_Class has no unserializer in /…/vendor/nette/http/src/Http/Session.php:100 @ / @@ exception-2016–12–20–14–15–42-bb14b9cd7147c40cea00556cb42ab728.html

V Exception je pak toto:

Nette\InvalidStateException
Class __PHP_Incomplete_Class has no unserializer

1. …/www/temp/cache/Nette.Configurator/d1198af7b775e27e16ac8b706cf767c1.php:1382 source Nette\Http\Session→ start ()

<?php
public function initialize()
{
date_default_timezone_set('Europe/Berlin');
Nette\Caching\Storages\FileStorage::$useDirectories = TRUE;
$this->getByType("Nette\Http\Session")->exists() && $this->getByType("Nette\Http\Session")->start();
?>

Chápu, že je něco ve spojitosti Sessions a Doctrine, ale nevím, jak to opravit? Pokud to teda vůbec půjde v rámci toho systému. Je tam udělané vlastní přihlašování pro Front-End, které používá Doctrine entitu User(která je dost rozsáhlá, je tam adresa apod.). V administraci je naopak na přihlašování použito Dibi a standardní Identity a to tyhle chyby neprodukuje. Taky se v session uchovávají věci vhozené do košíku(opět řada propojených Doctrine entit). Bohužel já jinak Doctrine nepoužívám a na podobnou chybu sem nikdy nenarážel.

newPOPE
Člen | 648
+
0
-

Vyzera to tak, ze sa snazite deserializovat triedu (mozno je v session po prihlaseni) ale zrejme k nej nemate zdrojak (taka trieda neexistuje v projekte no v session sa objavi). Moze sa to stat napr. ked mate 2 projekty web a app a web prihlasi da do session serializovanu instanciu triedy ktora v app neexistuje a tym padom to zahuci.

Skus si dumpnut celu $_SESSION hned na zaciatku ci tam nie je nejaky podozrivy serializovany objekt.

d@rkWolf
Člen | 167
+
0
-

Jo ještě jedna věc, na localhostu se to neprojevuje, resp. na localhostu můžu volně dělat cokoliv a žádná chyba se nezobrazí, logují se pouze na provozu. Ani když na localhostu vypnu debug mode. Do $_SESSION sem se kouknul, je tam hromada dat s přihlášením a zbožím v košíku, ale nic divnýho serializovanýho, aspoň pokud můžu soudit.