Výjimka od PDO – zjištění podrobností
- MikeLacroix
- Člen | 60
Zdravím,
PDO mi úplně na konec šablony přidává chybový výpis:
Fatal error: Uncaught exception ‚PDOException‘ with message ‚You
cannot serialize or unserialize PDO instances‘ in [no active file]:0
Stack trace: #0 [internal function]: PDO->__sleep() #1 {main} thrown in [no
active file] on line 0
Nemám tušení, kde k chybě dochází. Nějaká rada, kam umístit nějaký catch (PDOException…) nebo něco, abych zjistil trochu víc, kde k chybě dochází?
- MikeLacroix
- Člen | 60
Zdroják sem bohužel nepošlu, protože jde o větší aplikaci a jak říkám, nemám tušení, kde k chybě dochází.
Čekal jsem spíš, že půjde něco udělat s tou (skoro) nicneříkající hláškou tak, abych mi řekla, kde je problém. Ruku na srdce: Informace „no active file“, „internal function“, „line 0“ jsou úplně k ničemu.
Případně nějak šikovně globálně trasovat požadavky na uložení do session, nebo co já vím…
- Majkl578
- Moderator | 1364
MikeLacroix napsal(a):
a jak říkám, nemám tušení, kde k chybě dochází
Myslím, že enumagovo sdělení bylo dost jasné, ne? Šance, že to je tím, je řekněme 95%.
Případně nějak šikovně globálně trasovat požadavky na uložení do session, nebo co já vím…
Můžeš si dát breakpoint sem.
Můj tip je identita při přihlášení nebo něco na ten způsob. :)
- romiix.org
- Člen | 343
Daj si exit;
do stredu kódu (Myslím celý vykonávaný kód
v danom pohľade – od bootstrapu cez presenter, model až pokoniec
šablóny). Ak sa hláška stratí, presuň sa do stredu druhej polovice, ak
nie, tak do stredu prvej polovice kódu.
- MikeLacroix
- Člen | 60
romiix.org napsal(a):
Daj si
exit;
do stredu kódu (Myslím celý vykonávaný kód v danom pohľade – od bootstrapu cez presenter, model až pokoniec šablóny). Ak sa hláška stratí, presuň sa do stredu druhej polovice, ak nie, tak do stredu prvej polovice kódu.
:-)
No každopádně Majkl578 díky! Tak už vím, kde to vzniká. A teď mám ještě nový problém: Zkoušel jsem si teda upravit ukládaný objekt tak, aby se při pokusu o serializaci o tu activeRow postaral. Ale k mému nečekanému zjištění se metoda __toString() při pokusu o serializaci objektu nevolá.
Nějaká idea, jak se elegantně – těsně před serializací – postarat tedy o tu active row? Něco jiného než:
<?php
$objekt->activeRow = null;
$session->foo = $objekt;
?>
- enumag
- Člen | 2118
Při serializaci se nevolá __toString ale __sleep nebo serialize. Viz dokumentace PHP.
Pokud jde o activeRow tak ten pak v podstatě nemáš šanci deserializovat. Tzn. imho je lepší ukládat do session pouze ID.
- thunderbuff
- Člen | 164
Potřebuješ celou activeRow? Pokud ti jde jen o data, tak do session ukládej jen $activeRow->toArray()
- MikeLacroix
- Člen | 60
Super! Teď ještě ale jak to implementovat?
<?php
class Obj implements Serializable {}
?>
Z dokumentace jsem pochopil, že je to ve jmenném prostoru PHP…? Ale ať používám use PHP, \PHP\Serializable, tak mi to Nette nenajde.
- Jan Tvrdík
- Nette guru | 2595
@MikeLacroix: To jsi pochopil špatně. Je to
v globální jmenném prostoru, tedy \Serializable
. Buď více
pozorný při čtení dokumentace.
- MikeLacroix
- Člen | 60
Čéče, dal bych ruku do ohně, že to jsem rozhodně zkoušel. No asi jsem se někde překlepl. Díky!