Promazání cache – class not found
- Terka04
- Člen | 44
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 | 82
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.
- Marek Bartoš
- Nette Blogger | 1280
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
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)