Nettrine vraci Incomplete class
- user321
- Člen | 5
Ahoj vsichni narazil jsem na tento problem.
V trochu zapomenutem projektu jsem vymenil kdyby/doctrine za nettrine, ale
kdyz z entity zkusim ziskat data $entity->getSurname()
dostanu
err
The script tried to call a method on an incomplete object. Please ensure that the class definition "App\Model\Proxy\__CG__\App\Model\User\UserEntity" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide an autoloader to load the class definition
.
V konfiguraci nebylo nic nadstandardniho a tak to zustolo i pripade
nettrine – vicemene minimalni konfigurace. Pri checku pres
orm:info
je vsechny entity oznaceny stavem OK. Zkusim-li overit
existency proxy trid, tak uvedenou vygenerovanou tridu vidim. Ciste na pohled
nic nenaznacuje ze by trida nemela byt vygenerova cela. Pri pouziti se vse tvari
v poradku; tracy zaloguje selecty; entita je vracena a obsahuje validni data;
az na to ze je trida oznacena jako
App\...\__CG__\...\UserEntity (Incomplete class)
.
Jeste pridavam verze orm:0.8.4 dbal:0.8.2 zbytek je na zaklade techto dvou balicku + v projektu nebylo potreba balicku migration a fixtures (tak doufam ze jejich nepritomnost nezpusobuje onu chybu)
Nenapada nekoho cim by to mohlo byt nebo lepe zda jste se nekdo nesetkal se stejnym problemem.
Prede dekuji za napady a rady ;)
Editoval user321 (26. 8. 15:50)
- user321
- Člen | 5
Ahoj,
trochu jsem si stim jeste hral a overoval co se kde vraci. Overil jsem ze
z repositaru i service, ktere s repositarem pracuji se vraci proxy entity
$e = $rep->find(XX); dd($e::class); >>> App\...\__CG__\...\...Entity
.
Omlouvam se se tedy za mistifikaci, ze se jedna o problem s doctrinou.
Ale problem jsem lokalizoval na prihlaseni uzivatele, kdy puvodni autori si
Nette\Security\User
rozsirili o UserEntitu, kam si predavaji
entitu z db.
Prosel jsem akci pri prihlaseni uzivatele a:
// loginForm - success
$this->getUser()->login($identity); // tu je v identity userEntita (App\...\__CG__\...\UserEntity)
// nasleduje redirect
// zpracovani cile redirectu (presenter action default)
$user = $this->getUser()->getIdentity()->getUserEntity(); //tu uz je App\...\__CG__\...\UserEntity (incomplete class)
Takze to asi budu muset predelat, pokud tedy neexistuje nejaka moznost jak vracet complete class
- MajklNajt
- Člen | 493
Takže problém je s tým, že sa entita ukladá do sessions
,
preto som sa pýtal na cache
, pretože ja som sa s týmto stretol
ako pri cache, tak sessions
Najlepšie by bolo sa toho zbaviť, pozri https://doc.nette.org/…thentication#…
na metódu wakeupIdentity
, to by mohla byť cesta…
- user321
- Člen | 5
DIky moc za pomoc.
Ta wakeupIdentity
vypada dobre, mrknu zda bych to nemohl pouzit aj
tu ;)) ja to zatim vyresil, ze v mistech kde jsem potreboval onu enitu jsem si
ji vytahl na zaklade id ulozenem v Nette\Security\User
… nastesti
jen 3* pridany repositar a 4 zmenene volani :DD
Jeste jednou diky
- Marek Bartoš
- Nette Blogger | 1260
Lepší je vůbec se nepokoušet entitu ukládat do identity. Stačí si přetížit třídu User, přidat do ní metodu pro získání entity a používat tu.
Editoval Marek Bartoš (27. 8. 13:01)