🐘 PHP & Symfony Digest

Denní přehled PHP, Symfony a ekosystému · sobota 11. července 2026
Mám dostatek dat pro sestavení digestu. Generuji výstup.

TL;DR

Symfony 6.4.42 / 7.4.14 / 8.0.14 / 8.1.1 symfony release

Dne 27. června 2026 vyšly souběžně čtyři maintenance verze pokrývající všechny aktivně podporované větve Symfony. Větev 6.4 (LTS) dostala opravy v komponentách Yaml (parsování celých čísel s leading +) a HttpFoundation (doplnění RFC 5737, RFC 3849, RFC 2544 a RFC 5180 do IpUtils::PRIVATE_SUBNETS a PropertyInfo). Větev 8.1 opravila zalamování řádků v TUI komponentě při kombinaci whitespace + ANSI kódů a chybné rozlišování #[MapDateTime] argumentů jako řetězců v BuiltinTypeValueResolver.

Vydání jsou čistě opravná — žádné breaking changes. Vývojáři na větvi 7.x dostali ekvivalentní sadu záplat přes verzi 7.4.14. Symfony 8.0.14 je pravidelný patch k aktuální stable větvi 8.0. Všechna vydání jsou dostupná přes Composer; doporučuje se aktualizace bez prodlení zvláště kvůli opravám IP validace v HttpFoundation, které se mohou dotýkat bezpečnostních allow/block listů.

Twig 3.28.0: dynamická makra, rychlejší sandbox a přesné sloupce chyb symfony release

Twig 3.28.0 vyšel 3. července 2026 a přináší tři nezávislé novinky. Největší je návrat dynamického volání maker přes tečkový operátor: volání makra, jehož název znáte až za běhu, fungovalo dřív přes zastaralou funkci attribute(); nyní je nahrazena tečkovým operátorem, který maker plně podporuje. Druhá novinka se týká sandboxu – filtry, funkce a testy nově akceptují volbu always_allowed_in_sandbox. Je-li nastavena, sandbox si název vůbec nezaznamenává a nevyhodnocuje oproti security policy, čímž odpadá runtime overhead i nutnost explicitní allow-list položky.

Třetí změna zpřesňuje hlášení chyb: Twig nyní sleduje source offset každého tokenu a chybové hlášky tak mohou ukazovat přesný sloupec v šabloně. Nová metoda Error::getTemplateColumn() a Token::getOffset() umožňují IDE a nástrojům pro statickou analýzu přesné zvýraznění chybného místa. Sandbox navíc přestal generovat __toString wrapper kolem každého argumentu každého callable — obal se přidá jen tehdy, když typ PHP parametru skutečně umožňuje koerci na string, což snižuje množství generovaného kódu.

Symfony 8.2: novinky z aktivního vývoje symfony

Vývoj větve Symfony 8.2 je v plném proudu. Týden #1018 shrnul pull requesty schválené v posledních dnech: přibyl Cron constraint pro validaci cron výrazů přímo přes Symfony Validator, podpora pro jednorázové signed URL (single-use signed URLs), které se po prvním použití automaticky zneplatní, a vizuální indikátor pro dumpované proměnné přímo v debug profileru. Komponenta UriSigner dostala refaktoring – verze podpisu je nyní složena do samotného hash parametru, místo aby žila ve vyhrazeném query parametru.

Ve fázi návrhu (PRs otevřeny, čekají na merge) jsou další zajímavé věci: kompletní redesign stránky výjimek (ErrorHandler), nová třída RemoteTemplateEmail pro odesílání e-mailů renderovaných přímo poskytovatelem (Mailer), inline uzávěry jako constraint v komponentě Validator a nový příkaz messenger:show pro přehled čekajících zpráv v Messengeru. Celkem bylo v daném týdnu sloučeno 33 pull requestů od 18 přispěvatelů.

PHP 8.5.8 a 8.4.23: bezpečnostní patche php release

Dne 2. července 2026 vydal PHP tým verze 8.5.8 a 8.4.23 jako bezpečnostní a opravné vydání. Nejzávažnější oprava se týká memory corruption v openssl_encrypt() při použití AES-WRAP-PAD algoritmu (GH-22187, heap corruption). Druhý bezpečnostní problém je v komponentě Phar: funkce Phar::addEmptyDir() nesprávně blokovala cesty začínající na /.phar (ochrana magic adresáře), čímž umožňovala obejít ochranu přidáním lomítka na začátek cesty. SOAP server padal při neexistujícím $_SERVER jako poli (GH-22218) a nešel použít bez předání raw inputu do handle().

Z ostatních oprav stojí za zmínku fix goto přes try/finally blok (GH-22280 v Core), zachování správného case názvu třídy v chybových zprávách ReflectionClass::getProperty() a opravy v nové URI extension: nastavení LEXBOR_STATIC v CFLAGS na Windows pro statické linkování a čistění chybových logů mezi voláními „wither" metod v Uri\WhatWg\Url. PHP 8.5 je aktuálně ve fázi aktivní podpory; EOL je plánováno na 31. prosince 2029.

PHPStan 2.2.5 a Pest 4.7.5: toolingové aktualizace tooling release

PHPStan 2.2.5 vyšel 5. července 2026. Release přináší výkonnostní optimalizace: cachování výsledků isSuperTypeOf() per-guard, přeskakování constant-array guards při tvorbě podmíněných výrazů a zploštění hlubokých BooleanOr řetězů v resolveType(), čímž se eliminuje O(n²) složitost při zužování typů ve scope. Přidána byla také podpora PHP 8.5 partitioned cookie attribute pro session funkce (session_get_cookie_params() a tvary cookie option). Paralelně byl dne 8. července 2026 aktualizován balíček phpstan/phpstan-phpunit na verzi 2.0.18 (bump z 2.0.16).

Pest 4.7.5 vyšel 6. července 2026. Verze vyžaduje PHP ^8.3.0 a závisí na PHPUnit ^12.5.30 — jde o kompatibilní update sledující nejnovější PHPUnit 12 větev. Integrace s PHPStan je zajišťována balíčkem mrpunyapal/peststan (^0.2.11), který přidává generickou inferenci typů pro Pest's expect() funkci, takže PHPStan dokáže sledovat přesný typ hodnoty skrz celý assertion chain. Tato dvojice vydání potvrzuje trend těsné integrace statické analýzy a testovacích nástrojů v PHP ekosystému.

Doctrine ORM 2: EOL stále v limbu, adopce ORM 3 pomalá doctrine

Doctrine tým v říjnu 2025 publikoval aktualizaci k plánovanému End of Life Doctrine ORM 2: původní termín (únor 2026) nebyl dodržen, protože adopce ORM 3 stagnuje na zhruba 25–30 % instalací oproti ORM 2 dle statistik Packagist. Tým se rozhodl poskytnout uživatelům ORM 2 alespoň další 2 roky bezpečnostních a bugfix záplat — nový EOL datum nebyl explicitně stanoven, ale přibližně odpovídá roku 2027. Zároveň platí, že DBAL 4 (vydán spolu s ORM 3 v únoru 2024) je nadále plně udržován jako primární target pro nové projekty.

Pro migraci z ORM 2 na ORM 3 zůstávají hlavní překážky breaking changes v oblasti mapování metadat (atributy vs. anotace/XML) a změny v hydrataci a query builderu. Doctrine DBAL 4.x aktuálně dokumentuje verzi 4.4, přičemž poslední release na Packagist proběhl v březnu 2026. Projekty na Symfony 6.4 LTS většinou stále využívají ORM 2; přechod na ORM 3 je ale nezbytný pro Symfony 8.x, který jej jako výchozí variantu doporučuje.