Releaser & uppdateringar
En översikt av förändringar i Radix. För fullständig historik och taggar/versioner, se GitHub‑releaser.
v1.2.0 Förbättrad säkerhet
Framework
Den här releasen fokuserar på förbättrad säkerhet, stabilare miljökonfiguration och hårdare testtäckning.
Nytt och förbättrat
Återställt och förbättrat stöd för .env-styrning i GeoLocator.
GeoLocator kan nu läsa:
GEOLOCATOR_BASE_URL
GEOLOCATOR_TIMEOUT
Lagt till timeout-stöd för HTTP-anrop i GeoLocator.
Förbättrad hantering av ogiltiga eller tomma miljövärden.
Konstruktorargument i GeoLocator prioriteras före .env-värden.
Förbättrad felhantering vid ogiltiga API-svar från geolocation-tjänsten.
Förbättrad JSON-hantering i felmeddelanden från GeoLocator.
Säkerhet
Förbättringar kring security headers.
Hårdare skydd och testning runt säkerhetsrelaterade standardvärden.
Förbättrad hantering av sessionssäkerhet via miljövariabler, inklusive cookie-inställningar som HttpOnly, SameSite och Secure.
Tester och kvalitet
GeoLocator-testerna använder nu fake/spy istället för riktiga externa HTTP-anrop.
Mutationstester har stärkts för GeoLocator.
Fler tester för edge cases kring .env, timeout och API-fel.
PHPStan-anpassningar för striktare typkontroll.
Stabilare testsvit utan beroende av externa geolocation-anrop.
För utvecklare
GeoLocator är fortsatt bakåtkompatibel för normal användning:
getLocation() fungerar som tidigare.
getLocation(null) använder fortsatt $_SERVER['REMOTE_ADDR'].
get($key) fungerar som tidigare.
Applikationer kan konfigurera geolocation via .env utan att behöva ändra kod.
Nytt och förbättrat
Återställt och förbättrat stöd för .env-styrning i GeoLocator.
GeoLocator kan nu läsa:
GEOLOCATOR_BASE_URL
GEOLOCATOR_TIMEOUT
Lagt till timeout-stöd för HTTP-anrop i GeoLocator.
Förbättrad hantering av ogiltiga eller tomma miljövärden.
Konstruktorargument i GeoLocator prioriteras före .env-värden.
Förbättrad felhantering vid ogiltiga API-svar från geolocation-tjänsten.
Förbättrad JSON-hantering i felmeddelanden från GeoLocator.
Säkerhet
Förbättringar kring security headers.
Hårdare skydd och testning runt säkerhetsrelaterade standardvärden.
Förbättrad hantering av sessionssäkerhet via miljövariabler, inklusive cookie-inställningar som HttpOnly, SameSite och Secure.
Tester och kvalitet
GeoLocator-testerna använder nu fake/spy istället för riktiga externa HTTP-anrop.
Mutationstester har stärkts för GeoLocator.
Fler tester för edge cases kring .env, timeout och API-fel.
PHPStan-anpassningar för striktare typkontroll.
Stabilare testsvit utan beroende av externa geolocation-anrop.
För utvecklare
GeoLocator är fortsatt bakåtkompatibel för normal användning:
getLocation() fungerar som tidigare.
getLocation(null) använder fortsatt $_SERVER['REMOTE_ADDR'].
get($key) fungerar som tidigare.
Applikationer kan konfigurera geolocation via .env utan att behöva ändra kod.
v1.1.9 Säkerhetsuppdatering
Framework
Den här releasen härdar PHP-session cookies och gör cookie-säkerheten konfigurerbar via .env.
Nytt
Session cookies sätts nu med säkrare defaults.
Stöd för konfigurerbar Secure, HttpOnly och SameSite.
SameSite=None kräver SESSION_COOKIE_SECURE=true.
EnvValidator validerar nya session-cookie-inställningar.
Förbättrad hantering vid session destroy/delete.
Lägg till i befintliga projekt
SESSION_COOKIE_SECURE=auto SESSION_COOKIE_HTTPONLY=true SESSION_COOKIE_SAMESITE=Lax
För production rekommenderas
SESSION_COOKIE_SECURE=true SESSION_COOKIE_HTTPONLY=true SESSION_COOKIE_SAMESITE=Lax
CSP-rekommendation
Komplettera applikationens CSP med:
base-uri: self object-src: none
I PHP-konfigurationen motsvarar det:
'base-uri' => ["'self'"] 'object-src' => ["'none'"]
För API-profiler kan en striktare variant användas:
'base-uri' => ["'none'"] 'object-src' => ["'none'"]
Bakåtkompatibilitet
Session-hanteringen har säkra defaults om miljövariabler saknas, men applikationer som kör EnvValidator måste lägga till de nya SESSION_COOKIE_* variablerna i sin .env.
Teststatus
PHPUnit: grönt
PHPStan: grönt
Infection: 5019/5019 mutanter dödade
Mutation Code Coverage: 100%
Covered Code MSI: 100%
Nytt
Session cookies sätts nu med säkrare defaults.
Stöd för konfigurerbar Secure, HttpOnly och SameSite.
SameSite=None kräver SESSION_COOKIE_SECURE=true.
EnvValidator validerar nya session-cookie-inställningar.
Förbättrad hantering vid session destroy/delete.
Lägg till i befintliga projekt
SESSION_COOKIE_SECURE=auto SESSION_COOKIE_HTTPONLY=true SESSION_COOKIE_SAMESITE=Lax
För production rekommenderas
SESSION_COOKIE_SECURE=true SESSION_COOKIE_HTTPONLY=true SESSION_COOKIE_SAMESITE=Lax
CSP-rekommendation
Komplettera applikationens CSP med:
base-uri: self object-src: none
I PHP-konfigurationen motsvarar det:
'base-uri' => ["'self'"] 'object-src' => ["'none'"]
För API-profiler kan en striktare variant användas:
'base-uri' => ["'none'"] 'object-src' => ["'none'"]
Bakåtkompatibilitet
Session-hanteringen har säkra defaults om miljövariabler saknas, men applikationer som kör EnvValidator måste lägga till de nya SESSION_COOKIE_* variablerna i sin .env.
Teststatus
PHPUnit: grönt
PHPStan: grönt
Infection: 5019/5019 mutanter dödade
Mutation Code Coverage: 100%
Covered Code MSI: 100%
v1.3.3 Uppdatering för användning av radix-framework v1.1.8
App
Den här releasen förbättrar felhanteringen i Radix Framework genom att logga HTTP-undantag med mer korrekt allvarlighetsgrad.
Tidigare loggades nästan alla exceptions som error, även normala klientfel som till exempel 404 PageNotFoundException. Det kunde skapa onödigt brus i produktionsloggarna, särskilt från botar och scanners som försöker nå vanliga paths som inte finns.
Tidigare loggades nästan alla exceptions som error, även normala klientfel som till exempel 404 PageNotFoundException. Det kunde skapa onödigt brus i produktionsloggarna, särskilt från botar och scanners som försöker nå vanliga paths som inte finns.
v1.1.8 Fixad loggnivå för HTTP-undantag
Framework
Den här releasen förbättrar felhanteringen i Radix Framework genom att logga HTTP-undantag med mer korrekt allvarlighetsgrad.
Tidigare loggades nästan alla exceptions som error, även normala klientfel som till exempel 404 PageNotFoundException. Det kunde skapa onödigt brus i produktionsloggarna, särskilt från botar och scanners som försöker nå vanliga paths som inte finns.
Nytt beteende:
Serverfel, 5xx, loggas som error.
Klientfel, 4xx, loggas inte längre som error.
404 loggas inte som standard.
Andra 4xx-fel, exempelvis 400, 403 och 405, loggas som warning.
HTTP-svar och API-svar påverkas inte.
Det innebär att exempelvis en saknad route fortfarande ger 404, men inte längre skräpar ner error-loggen som ett serverfel.
Oförändrat beteende
Ändringen påverkar inte:
HTTP-statuskoder
felvyer
JSON/API-felsvar
publik API-yta
PageNotFoundException
vanliga serverfel/runtime exceptions
Riktiga serverfel fortsätter att loggas som error med stacktrace.
Kvalitetssäkring
Ändringen är verifierad med:
PHPUnit
PHPStan
Infection mutation testing
Tidigare loggades nästan alla exceptions som error, även normala klientfel som till exempel 404 PageNotFoundException. Det kunde skapa onödigt brus i produktionsloggarna, särskilt från botar och scanners som försöker nå vanliga paths som inte finns.
Nytt beteende:
Serverfel, 5xx, loggas som error.
Klientfel, 4xx, loggas inte längre som error.
404 loggas inte som standard.
Andra 4xx-fel, exempelvis 400, 403 och 405, loggas som warning.
HTTP-svar och API-svar påverkas inte.
Det innebär att exempelvis en saknad route fortfarande ger 404, men inte längre skräpar ner error-loggen som ett serverfel.
Oförändrat beteende
Ändringen påverkar inte:
HTTP-statuskoder
felvyer
JSON/API-felsvar
publik API-yta
PageNotFoundException
vanliga serverfel/runtime exceptions
Riktiga serverfel fortsätter att loggas som error med stacktrace.
Kvalitetssäkring
Ändringen är verifierad med:
PHPUnit
PHPStan
Infection mutation testing
v1.3.2 Fix location middleware
App
Ändrat location middleware till att både controllera country och city.
v1.3.1 Fix sidebar layout
App
Lagt till container-sidebar-main för att justera main och footer med sidebar.
v1.3.0 Återställt layoutfil i home/index
App
Liten fix, ändrat layoutfil i views/home/index till main
v1.2.9 Updaterad sidebar layout
App
Infört mer konsekvent sidebar-layout för publika informationssidor
Förbättrat aktiv markering i navigationen
Standardiserat högerkolumner för bättre visuell struktur
Enhetliggjort rubriker och sidhuvuden mellan informationssidor
Städat upp Alpine-beteende i mobilmenyn för bättre CSP-kompatibilitet
Förbättrat aktiv markering i navigationen
Standardiserat högerkolumner för bättre visuell struktur
Enhetliggjort rubriker och sidhuvuden mellan informationssidor
Städat upp Alpine-beteende i mobilmenyn för bättre CSP-kompatibilitet
v1.2.8 Stöd för språkprefix i sök, paginering och adminåtgärder
App
Den här uppdateringen förbättrar hur applikationen hanterar URL:er i frontend. Tidigare fanns hårdkodade sökvägar i vissa JavaScript-funktioner, vilket kunde orsaka problem när webbplatsen kördes under språkprefixade adresser. Nu används servergenererade routes genomgående för sök-endpoints, paginering och adminåtgärder.
Det innebär bland annat förbättrad stabilitet för:
profilsökning
användarsökning
sökning i stängda konton
systemhändelser
systemuppdateringar
länkar för redigering, radering, blockering, återställning och aktivering
Det innebär bland annat förbättrad stabilitet för:
profilsökning
användarsökning
sökning i stängda konton
systemhändelser
systemuppdateringar
länkar för redigering, radering, blockering, återställning och aktivering
v1.2.7 Uppdatering layout
App
Uppdatering till radix-framework v1.1.7 i layouts.
Radix Framework
QueryBuilder har fått bättre stöd för grupperade och uttrycksfulla villkor:
orWhere() accepterar nu Closure för nästlade OR-grupper
whereExists() accepterar nu både QueryBuilder och Closure
whereNotExists() accepterar nu både QueryBuilder och Closure
Det gör det enklare att bygga mer avancerade SQL-villkor på ett läsbart och konsekvent sätt.
Radix Framework
QueryBuilder har fått bättre stöd för grupperade och uttrycksfulla villkor:
orWhere() accepterar nu Closure för nästlade OR-grupper
whereExists() accepterar nu både QueryBuilder och Closure
whereNotExists() accepterar nu både QueryBuilder och Closure
Det gör det enklare att bygga mer avancerade SQL-villkor på ett läsbart och konsekvent sätt.
Saknar du en detalj här? Se GitHub‑releaser för komplett historik.