Trying to get property of non-object
- JarekSt
- Člen | 39
Nekdy se mi stane, ze mi u stranky (ktera v 99% pripadu nebehne bez
problemu) vyskoci hlaska „Trying to get property of non-object“.
File: …\vendor\nette\nette\Nette\Database\Table\ActiveRow.php:312
Zajimave je, ze mi staci obnovit stejnou stranku (F5) a vse nebehne bez problemu (neudelam nic vic, nezmeni se data ani nic jineho). Co by to mohlo byt?
- JarekSt
- Člen | 39
matej21 napsal(a):
verze nette? kod, ktery to dela?…
nette verze: 2.1.0 (ale delalo to i na jinych verzich – 2.1.4 a
2.2.1).
nevim, co vsechno chces videt, ale treba takhle vypada sablona (zobrazuji se
data z tabulky, ktera ma seznam nejakych temat („stromova struktura“)
‚idecko‘, ‚nazev‘, ‚idecko nadrizeneho uzlu‘ + nejake dalsi
atributy):
- JarekSt
- Člen | 39
struktura tabulky:
CREATE TABLE temata
(
id_tema
int(10) unsigned NOT NULL AUTO_INCREMENT,
id_parent
int(10) unsigned NOT NULL,
nazev_tema
varchar(200) COLLATE utf8_czech_ci DEFAULT NULL,
popis_tema
text COLLATE utf8_czech_ci,
pristupne
char(1) COLLATE utf8_czech_ci DEFAULT NULL,
poradi
smallint(6) DEFAULT NULL,
PRIMARY KEY (id_tema
),
UNIQUE KEY id_parent,poradi
(id_parent
,poradi
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci
- hranicka
- Člen | 23
Stává se nám to také. Když se smaže cache, poté se provede request na
nějakou stránku (Nette\Database si vytvoří cache) a pak přejdeme na další
stránku, Nette\Database\Table\Selection někdy pozlobí, což se projeví jak
píše JarekSt.
Když je vypnutý debug mode, tak ani F5 nepomůže.
Možné provizorní řešení:
- upravit Nette\Database\Table\Selection::offsetGet
Nebo je možný také jiný hack (i když předchozí řešení považuji za „lepší“):
- upravit Nette\Database\Table\ActiveRow::accessColumn
Issue:
https://github.com/…se/issues/15
Chybu nedokážu zatím reprodukovat cíleně, do té doby nemůžu dopsat testy a pullnout opravu :(
Editoval hranicka (3. 7. 2014 7:37)
- hranicka
- Člen | 23
@JanEndel Zatím to sem dávám jako návrh (příčina bude možná jinde), problém je, že tu chybu nedokážu spolehlivě reprodukovat. Až se mi to povede, dopíšu testy a pošlu pull, zatím nemůžu :(
Snad se ozve ještě někdo komu se to stává. Pokusím se ještě vypozorovat kdy přesně k tomu problému dojde, najít řešení a pullnout. Ale může to chvilku trvat.
- oskarmaniak
- Člen | 29
Po přechodu z nette 2 na 2.2.1, 2.2.2 bojuji nejspíše s obdobným cachovacím problémem, který má za následek Trying to get property of non-object chybovou hlášku.
/temp/cache/latte hlásí problém při vyčítání proměnné poslanou do šablony z presenteru
Pokud nahodím zálohu nette 2 tak se data vyčítají, údaje v DB tedy existuje.
Dostal jsem se ke kroku vypnout latte cachování v tu chvíli se chybová hláška změní na:
A na tom jsem se zasekl…
Editoval oskarmaniak (1. 7. 2014 16:58)