Aktualizace projektu pro PHP7
- scientific
- Člen | 94
Ahoj všem, dostal se mi do ruky projekt, který mám zmigrovat na novější webhostingový server s PHP7, problém je v tom, že mi log hlásí následující:
Abych to vyřešil, je zřejmě potřeba aktualizovat prostřednictvím „composer update“, to se ale též neobejde bez problému:
Máte prosím někdo pro mě tip, jak to na rozchodit na PHP72 ideálně prostřednictvím aktualizace? Jsem noob, takže bych prosil polopatický postup jak obecně na to, konkrétní návody už si zkusím případně dohledat.
Editoval scientific (1. 4. 2020 13:48)
- Ondřej Kubíček
- Člen | 494
tak záleží jak máš nastavený composer, potřebuješ minimálně nette 2.4, tipuji že máš starší, tu knihovnu pdfresponse máš v dev verzi, takže ta se ti aktualizuje, ale samotné nette ne, nebo možná jen setinková verze, těžko říct bez composeru
- scientific
- Člen | 94
Posílám ještě nějaké informace, které si myslíš, že tě zajímají:
# composer -V
Composer version 1.10.1 2020–03–13 20:34:27
# cat composer.json
cat composer.lock
Je moc dlouhý, ale podle mě tě stejně nezajímá, případně mohu
doposlat.
Děkuji ti za snahu mi pomoci.
Editoval scientific (1. 4. 2020 12:01)
- David Grudl
- Nette Core | 8249
Jo, jasně. Možná by se dalo všechny Nette\Object přejmenovat na Nette\LegacyObject a nainstalovat nette/deprecated.
- Marek Bartoš
- Nette Blogger | 1296
Problém je v té externí knihovně, která spolu s odstraněním Object
přestala podporovat starší Nette
https://github.com/…c1c7c7950c09
Zvolil bych fork a tu podporu Nette 2.3 si doplnit, pokud nechceš aktualizovat Nette
- scientific
- Člen | 94
@DavidGrudl
Uživatel @Mabar mi poradil v vendor/jkuchar/PDFresponse/PDFresponse.php
nahradit Nette/Objedct za „Nette/SmartObject“, čímž se mi vyřešil
problém se „composer update“
Nyní bych se hádám ještě měl zbavit abstraktní třídy Object v vendor/nette/utils/src/Utils/Object.php:52 Tak, že ji vlastně mohu beztrestně přejmenovat na „LegacyObject“?
Tím pádem bycch nemusel forkovat to PDFresponse.php, jen uvnitř přepsat Název třídy?:
Chápu to správně? Upravit jméno třídy potom musím všude napříč
Nette, jako třeba tady:
File: …/nette/caching/src/Caching/Storages/FileStorage.php:17
Editoval scientific (1. 4. 2020 17:34)
- David Grudl
- Nette Core | 8249
Do vendoru nezasahuj. Tady ti nezbývá než aktualizovat na Nette 2.4.
Ale v samotné aplikaci se zbav Nette\Object. Buď náhradou za traitu SmartObject, nebo přejmenování na LegacyObject a doinstalováním balíčku nette/deprecated, který tuto třídu obsahuje.
- scientific
- Člen | 94
To jsem udělal:
- Použil jsem v samotné aplikaci jkuchar/pdfresponse Nette\SmartObject namísto Nette\Object.
- Aktualizovat v composer.json „2.3“ → „2.4“
- Spustil s úspěšným dokončením „composer update“
Můj problém to ale nevyřešilo, Tracy hlásí (Protože abstraktní třída, která je použita v 29 souborech pořád existuje, ale zárveň si mi sdělil, řže ve vendor mám upravit jen tu samotnou aplikaci „jkuchar/pdfresponse“, na nic dalšího nesahat.):
Nemám odkomentovat ten řádek @deprecated use trait Nette\SmartObject ?
Děkuji za další nasměrování.
P.S. Jinak díky chlape za super Framework, teprve se s ním učím, mám k němu hodně výhrad, ale všechny jistě pramení z mé nevědomosti, budu se snažit všechno pochopit, abych došel do fáze, kdy ho začnu používat rád. Každopádně velký respekt, doposud sem nevěděl, že je to tvoje práce, též děkuji i komunitě, co ti pomáhá s vývojem.
Editoval scientific (1. 4. 2020 20:25)
- scientific
- Člen | 94
No Vlastně když se mi povedlo zaktualizovat z 2.3 → 2.4, tak bych asi mohl pokračovat na 3.0 a tak dále, dokud problém s třídou „Objekt“ nepomine? Protože po aktualizaci na 2.4 mi tracy pořád řve, že „Object“ se ta třída jmenovat nemůže.
Přitom na stránce https://doc.nette.org/…tions/to-2-4 se píše, že tam funguje právě SmartObject jako náhrada za Object. Tak nechápu, proč mi to pořád nejde.
Editoval scientific (1. 4. 2020 20:28)
- David Grudl
- Nette Core | 8249
Zaktualizuj jen nette/utils na 2.5. Tam už Nette\Object není. Místo toho je tam věc, která by ti měla pomoct odhalit, kde se Object ještě používá.
- scientific
- Člen | 94
*Hotov, já vím, kde se Nette\Object používá, jen nevím k čemu mi ta informace má být, když nesmím upravovat nic ve vendor. *
Nyní mi tracy hlásí toto, ale mám zákaz to ve vendor upravovat, tak nevím co dál (takže to ve finále upravit můžu ručně upravit na Nette\SmartObject?):
Kde všude je děděný Nette\Object jsem věděl už předtím, pomocí
Aktuální stav:
Editoval scientific (1. 4. 2020 21:00)
- David Grudl
- Nette Core | 8249
Vendor se opravuje tím, že aktualizuješ knihovny Composerem. Ruční úprava by ti k ničemu nebyla, protože by ji Composer hned smazal.
Takže zaktualizuj ještě nette/caching na 2.5.
- scientific
- Člen | 94
Jo takhle, chápu.
Už to funguje.
Děkuji moc za pomoc.
Editoval scientific (2. 4. 2020 12:49)