Promazání cache – class not found

Terka04
Člen | 44
+
0
-

Hezký večer,
snažím se smazat cache pomocí:

$this->cache->clean([
	Cache::ALL => true,
]);

Avšak hlásí mi to:

Class 'App\Presenters\Cache' not found

Nechápu proč. V $this->cache mám cache nahranou (dumpovala jsem).

V common.neon mám:

services:
- Nette\Caching\Cache

a v presenteru:

/** @var Nette\Caching\Cache @inject */         public $cache;

Kde ještě dělám, prosím, chybu? :)

Edit: Chybu mi to hlásí na řádku:

Cache::ALL => true,

Editoval Terka04 (7. 12. 2021 18:56)

emololftw
Člen | 81
+
+3
-

Ano Cache mas injecnute. Ale Cache::All potrebuje use statement. Zkus pridat:

use Nette\Caching\Cache;

Editoval emololftw (8. 12. 2021 7:51)

Terka04
Člen | 44
+
0
-

Funguje, děkuju moc.

Blbě se zeptám. Proč musím znovu načíst namespace, když už ho vlastně mám v common.neon?

emololftw
Člen | 81
+
+1
-

Terka04 napsal(a):

Funguje, děkuju moc.

Blbě se zeptám. Proč musím znovu načíst namespace, když už ho vlastně mám v common.neon?

v souboru common.neon nedefinujete jaký namespace používáte, tam definujete „co kde použít“. Následně v presenteru musíte definovat jaké namespace budete používát. V IDE doporučuji napovídání a pro inject v presenteru použít __constructor() jelikož pak Vám to hezky napoví jaký namespace pro danou třídu chcete vlastně použít (můžete mít X Cache tříd) a automaticky ho přidá na začátek souboru.

David Grudl
Nette Core | 8110
+
+1
-

Použij $this->cache::ALL a nemusíš nic řešit.

Marek Bartoš
Nette Blogger | 1165
+
+1
-

use statementy jsou lokální, vztahují se pouze na aktuální soubor. Když napíšeš v php Cache, jde o třídu Cache v aktuálním namespace, v tvém případě \App\Presenters\Cache. Abys použila Cache z Nette, tak musíš mít buď use Nette\Caching\Cache; nebo použít absolutní namespace \Nette\Caching\Cache.

V neonu nic jako use statementy ani aktuální namespace neexistuje, na php třídy se tak vždy odkazuješ přes onen absolutní namespace (tím, že namespace v neonu není, tak funguje absolutní varianta s lomítkem na začátku, i relativní bez něj)

(Narazíš i na variantu s importem namespace namísto třídy z něj – use Nette\Caching a třída se pak odkazuje přes Caching\Cache, ale většinou to jen přidělává práci)

Editoval Marek Bartoš (7. 12. 2021 19:35)

Terka04
Člen | 44
+
0
-

Ooooo, děkuji pánové všem za slušnou odpověď. Takto mi to stačí a již rozumím. Děkuji. :)

Terka04
Člen | 44
+
0
-

Otevírám ještě tuto diskuzi, ale po promazání cache se mi občasně posílá e-mailem chybové hlášení

PHP Warning: filemtime(): stat failed for /var/www/clients/client1/web01/subdomains/test/app/../temp/cache/_%00387fbc36428a1e95653e8f36929dd07d in /var/www/clients/client1/web01/subdomains/test/vendor/nette/caching/src/Caching/Storages/FileStorage.php:98

V logách jsem nic neobjevila. Nevíte, co to může být? :)

Editoval Terka04 (12. 12. 2021 21:19)