Class XY not found v PHP8.1
- Kajda23
- Člen | 42
Ahoj,
řeším pro mě poměrně zvláštní věc, které nerozumím a už
nevím kudy.
Upravuji poměrně rozsáhlý projekt z původního PHP 7.2 na PHP 8.1. Prošel jsem postupně všechny předchozí verze PHP poměrně bez problémů, až u verze 8.1 jsem narazil. Jakákoliv služba zapsaná v configu je not found. Třídy existují, robot loader má nastavenu příslušnou složku, cache je smazaná. Na PHP 8.0 bez jakéhokoliv zásahu kromě smazání cache všechno šlape, na PHP 8.1 Nette\DI\ServiceCreationException Class ‚XY‘ not found.
Setkal se někdo? Dal bych víc informací, ale ani náznakem nevím, co je podstatné a co ne.
- Marek Bartoš
- Nette Blogger | 1274
Aktualizoval jsi i Nette? S PHP 8.1 potřebuješ Nette 3.1
https://nette.org/en/maintenance#…
Vždy když děláš update PHP bys měl v composer.json zapsat, na které
verzi PHP aplikace pojede v produkci a zkusit
spustit composer update
{
"config": {
"platform": {
"php": "8.1.5"
}
}
}
- Marek Bartoš
- Nette Blogger | 1274
Zkus composer outdated
, nette/robot-loader potřebuješ mít ve
verzi 3.4.1, která přidává podporu pro PHP 8.1
Že jsi smazal seznam všech balíků a nechal Composer nainstalovat
nejnovější možné ještě neznamená, že se nainstalovaly nejnovější.
Můžeš tam mít další balíky, které vyžadují starší verze.
Pokud se ti třeba nette/robot-loader zobrazuje ve starší verzi, tak pomocí
composer why-not nette/robot-loader 3.4.1
zjistíš, který balík
ti to blokuje.
Buď konflikt vyřešíš nebo můžeš vyžadovat
"nette/robot-loader": "3.4.1 as x.x.x"
. Přičemž
x.x.x
je tvoje aktuální verze. Konflikt tak obejdeš, ale
riskuješ, že se tím knihovna vyžadující jinou verzi robot loaderu
rozbije.
Editoval Marek Bartoš (4. 10. 2022 9:48)
- Kajda23
- Člen | 42
Tak jen pro zajímavost, složka s některými servisními třídami je v projektu jako junction (symlink). Ty, které jsou v této složce, nejsou načteny, ty, které jsou v normální složce u projektu načteny robot loaderem jsou. Na vině je zřejmě nějaký bug nebo omezení PHP 8.1 na Windows, který neumí pracovat s junction složkami. V nižších verzích všechno funguje.