Slim 4 / PHP 8.2 upgrade
A keretrendszerünk PHP verzió lépéséhez egy "speciális" Slim 4-en alapuló keretet készítettünk. A projekt célja hogy a meglévő moduljaink a lehető legkisebb változtatással működjenek az új környezetben (PHP 8.2).
A Slim 4 alapelve az volt, hogy minden ami (szerintük) nem a keretrendszer része (Routing, DI container stb...) az kerüljön ki a csomagból és majd a user eldönti hogy mit akar használni.
A megoldás nagyrészt abból állt, hogy a korábbi implementációkat átemeltük a Slim4-es keretbe. Ilyen módon a DI container az betűre ugyan az maradt, ugyanúgy a központi Trait-en keresztül tudjátok elérni.
Másik célkitűzésük volt hogy a saját HTTP/Request és Response dolgaikat PSR-7 kompatibilis megoldásokra cserélték le, ami szép és jó, de a mi esetünkben voltak kellemetlen mellékhatások, pl. a PSR-7 Response nem ismeri a withJSON függvény, amit mi a API végpontoknál előszeretettel használunk. Erre egy külön csomagot csináltak, ami a PSR-7 Response-t "kidekorálja" és kiegészíti a megfelelő függvényekkel (slim/http csomag).
Ez lett:
Ez volt:
Ez lett:
Ez volt: Ez lett:
Továbbá a PermissionsMiddleware.php-ban kell módosítani az elábbi sorokat:
Erről: Erre:
A legegyszerűbb megoldás az volt hogy a route parser-t külön kitettem a konténerbe ahonnan bárhol el tudjátok érni.
Ez volt:
Ez lett:
Twig-ben ez volt:
Twig-ben ez lett:
Tömegs lecserélés a VSCode-ban: Ctrl + Shift + H
Az új koncepcióban már egy Handler jön paraméterben, az egyedi hibaoldalak rendereléséhez a global $app-ból lehet kérni Response-t a funkción belül (ha szükséges Twig render miatt).
Ez volt:
Ez lett:
In PHP 8.0, the @ operator does not suppress certain types of errors that were silenced prior to PHP 8.0. This includes the following types of errors:
A saját extensionban megváltoztak a névtér hivatkozások:
Ebből: new \Twig_SimpleFilter('number_afix',
Ez lett new \Twig\TwigFilter('number_afix',
Ugyanez érvényesült a Twig_SimpleFunction-nál, ő Twig\TwigFunction lett. A frissítés leginkább a konténerben lévő dolgokat kavarta meg, több beépülő függvény használt olyan függvényeket amik átkerültek máshova
(pl. pathFor, getBaseUrl). A végleges verió még tesztelés alatt van, itt majd érdemes lesz a System/View modult teljes egészében lecserélni a megadott frissített modulra.
A Slim 4 alapelve az volt, hogy minden ami (szerintük) nem a keretrendszer része (Routing, DI container stb...) az kerüljön ki a csomagból és majd a user eldönti hogy mit akar használni.
A megoldás nagyrészt abból állt, hogy a korábbi implementációkat átemeltük a Slim4-es keretbe. Ilyen módon a DI container az betűre ugyan az maradt, ugyanúgy a központi Trait-en keresztül tudjátok elérni.
Másik célkitűzésük volt hogy a saját HTTP/Request és Response dolgaikat PSR-7 kompatibilis megoldásokra cserélték le, ami szép és jó, de a mi esetünkben voltak kellemetlen mellékhatások, pl. a PSR-7 Response nem ismeri a withJSON függvény, amit mi a API végpontoknál előszeretettel használunk. Erre egy külön csomagot csináltak, ami a PSR-7 Response-t "kidekorálja" és kiegészíti a megfelelő függvényekkel (slim/http csomag).
Átállás folyamata:
- Nyiss egy új branch-et a masterből (Ne kérj composer installt)
- Portainerben indítsd el a konténert
- ** Másold be a referencia saml mappát (ez lehet majd kikerül, ha Johnny megálmodja a 2.0-s verziót), referencia a slim4-8 / master-ben
- A saml/config/authsources.php-ban írd áz az entityID-t a sajátodra
- A korábbi SimpleSAML_Logger::NOTICE class erre változott, a saml confiug.php-ban át kell írni SimpleSAML\Logger::DEBUG
- Hozd át a settings.php-dat
- Töröld le a comsposer.lock-ot, a composer.json require részét meg ürítsd ki
- Composerrel telepítsd az alábbi függőségeket (lehet a konténeren belülről fog csak menni (ssh-docker PROJEKT-BRANCH), a külső composerrel PHP 8.2 alatt voltak gondok)
- Alap csomagok: composer require slim/slim slim/psr7 slim/twig-view slim/http pimple/pimple simplesamlphp/simplesamlphp
- Egyesével pakolgasd fel a projekthez kellő csomagokat, figyelj, mert a FaaZ/PDO-ból alapból a 2.0-t hozza, sok projekt viszont az 1.0-n van
- Hozd át a core mappát a referencia projektből (slim4-8)
- Módosítsd az index.php-t a public mappában a referencia projektnek megfelelően
- A simplesaml vendorból szedd le a cert könyvtárat
- A simplesaml 2.0 már másabb konfiggal megy, le kell választani a "régi" központi cuccról. Az app webapp.conf filejában a /simplesaml simlink-et állítsd a vendor-ban lévő simplesaml mappa public almappájára
- Módosítsd a composer.json-t hogy a core mappát is töltse be, ne csak az app-ot (autoload szekció, psr-4), ha megvan akkor futtass egy composer dump-autoload-ot
- Fésüld át a projektedet és a fenti változásokat vezesd át (route-ok, middleware-ek, dinamikus osztályok)
- Teszteld a projekted, minden funkcionlitást, ha hibát látsz, log-ból túrd ki hogy mi az és javítsd (lib verzió ugrás is könnyedén okozhat hibát)
Változások:
Voltak olyan változások amiket nem lehetett / nagyon problémás lett volna áthidalni, ezek:PHP 8 dinamikus osztály attribútumok
A Trait-nél és sok más helyen is használtuk ezt a megoldást, a példányosított objektumba olyan attribútumokat hoztunk létre ami nem szerepelt a osztály definícióban. Ez PHP 8-ban már nem működik sajnos. Ez volt:Ez lett:
ALFI/Core
Ez a dinamikus attribútum dolog használva volt az ALFI/Core-ban is, így ebből készül egy 2.0-s változat, jelenleg ha ki akarjátok próbálni, akkor a composer fájlban a dev branch-et kell "kérni" (a dev- előtag jelzi hogy branch-et kérsz, a második dev a branch neve :)):Routing group-olás
A Route fájlokban korábban az $app objektumon keresztül definiáltuk a bejegyzéseket és a groupokat is. Ezt kicsit átvariálták és bevezettek egy RouteCollectorProxy class-tEz volt:
Ez lett:
Route permission-ök
Amennyiben az alkalmazás használja a route permissionöket, az alábbi fájlokat/sorokat is módosítani kell.Ez volt: Ez lett:
Továbbá a PermissionsMiddleware.php-ban kell módosítani az elábbi sorokat:
Erről: Erre:
pathFor metódus a router-ben és Twig-ben
A kiszervezési mánia sajnos a Router-t is érintette, eddig a konénerben volt egy router ami tudta a pathFor metódust. A pathFor az a routeParserben volt korábban is, ez volt kivezetve a routerbe mint "szolgálktatás", első körben a pathFor-t átnevezték urlFor-ra és nem vezették ki a routerbe.A legegyszerűbb megoldás az volt hogy a route parser-t külön kitettem a konténerbe ahonnan bárhol el tudjátok érni.
Ez volt:
Ez lett:
Twig-ben ez volt:
Twig-ben ez lett:
Tömegs lecserélés a VSCode-ban: Ctrl + Shift + H
Middleware-ek
A middleware-eket kicsit átvariálták, korábban az __invoke megkapta a $next objektumot amivel továbblökhette a kérést illetve a DI konténerből le lehetett kérni a View-t amivel tetszőleges twig-et ki tudott renderelni (hiba oldalak).Az új koncepcióban már egy Handler jön paraméterben, az egyedi hibaoldalak rendereléséhez a global $app-ból lehet kérni Response-t a funkción belül (ha szükséges Twig render miatt).
Ez volt:
Ez lett:
@ használata a kivételek elfedésére
A PHP 8.0-tól már nem "némítja" el a Fatal Error kategóriába eső dolgokat.In PHP 8.0, the @ operator does not suppress certain types of errors that were silenced prior to PHP 8.0. This includes the following types of errors:
- E_ERROR - Fatal run-time errors.
- E_CORE_ERROR - Fatal errors occurred in PHP's initial startup.
- E_COMPILE_ERROR - Fatal compile-time errors (from Zend engine).
- E_USER_ERROR - User-triggered errors with trigger_error() function.
- E_RECOVERABLE_ERROR - Catchable fatal error.
- E_PARSE - Compile-time parse errors.
Action return bug
A beépülő könyvtárakat átszervezte a Slim, így állt elő egy bosszantó bug:Cache bug
Hibalog: ErrorException: Only variables should be passed by referenceTwigView
A Twig integrációt is erősen érintette a frissítés, korábban volt egy gyári Twig Extension, ezt az új változatban már nem kell kézzel példányosítani.A saját extensionban megváltoztak a névtér hivatkozások:
Ebből: new \Twig_SimpleFilter('number_afix',
Ez lett new \Twig\TwigFilter('number_afix',
Ugyanez érvényesült a Twig_SimpleFunction-nál, ő Twig\TwigFunction lett. A frissítés leginkább a konténerben lévő dolgokat kavarta meg, több beépülő függvény használt olyan függvényeket amik átkerültek máshova
(pl. pathFor, getBaseUrl). A végleges verió még tesztelés alatt van, itt majd érdemes lesz a System/View modult teljes egészében lecserélni a megadott frissített modulra.