objekt vyhazuje „Trying to get property of non-object“

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

Ahoj,

v callbacku v acl chci kontrolovat, jestli je uživatel, který se snaží o edit, autorem daného příspěvku (typický problém). narazil jsem ale na zvláštní problém. skript mi vyhazuje chybu „Trying to get property of non-object“. skript v callbacku:

return $permission->queriedResource->author->id === Environment::getUser()->id;

experimentováním s kódem jsem zjistil, že onu chybu vyhazuje následující příkaz:

$permission->queriedResource->author->id;

$permission->queriedResource; ještě proběhne v pořádku, $permission->queriedResource->cokoli; už vyhazuje onu chybu. zvláštní ale je, že příkazy:

dump($permission->queriedResource->author->id); die;

vrátí opravdu id autora příspěvku, stejně tak:

dump(get_class($permission->queriedResource)); die;

vrátí název třídy. (bez die; opět vyhazuje chybu). hlášku absolutně nechápu, protože $permission->queriedResource je evidentně objekt. nevím, jak při debugu dále postupovat :(

verze nette: 2.0.10
verze php: 5.4.7

Jan Tvrdík
Nette guru | 2595
+
0
-

hlášku absolutně nechápu, protože $permission->queriedResource je evidentně objekt.

Zvláštní, já tvrdím opak =) Hláška říká, že to není objekt tak to není objekt. Když vyhodíš volání die, tak si všimneš, že se tam časem ten non-object (pravděpodobně null) dostane.

Neas
Člen | 43
+
0
-

už jsem na to přišel. bylo to jak tvrdíš, tahle část skriptu se vykonávala 2× a napodruhé se jednalo o null. vím, že kontrola přístupu by se měla provádět za skript jen jednou, tohle bylo nedopatření způsobené tím, že jsem původní skript několik měsíců neviděl. už opraveno, díky.