Článek původně vyšel na autorově blogu.
Symfony už toho umí opravdu hodně, nová verze klade velký důraz především na DX (developer experience). Přináší nám jednodušší a jednoznačné API, lepší decoupling komponent, integraci standardů PSR-3 a PSR-7. A spoustu dalších novinek, díky kterým bude psaní aplikací zase o něco zábavnější.
Kdy vyjde která verze?
Zažil jsi migraci ze Symfony 1 na 2 a chceš se vyhnout podobnému masakru? Neměj obavy – novinek je sice spousta, ale Symfony se poučilo a nedá dopustit na zpětnou kompatibilitu.
Migrace Symfony 2 na 3 bude značně zjednodušena tím, že spolu s verzí 3 vyjde i verze 2.8. Ta bude mít všechny nové featury verze 3 a bude obsahovat BC vrstvu k sérii 2.x. Verze 2.8 bude long term support (LTS) – můžeš tak počítat s podporou až do konce roku 2018.

Verze 2.8 bude LTS. První LTS nové série bude až 3.3 (vyjde v květnu 2017).
Jaké jsou tedy 2 hlavní rozdíly mezi 3.0 a 2.8?
- min. verze PHP 5.5
- odstraněný veškerý deprecated kód, který poskytuje BC kompatibilitu k 2.x (~ 10 % kódu)
A nyní ke 4 očekávaným novinkám
1. Autowiring služeb
Symfony nyní podporuje constructor autowiring. Při vytváření definice služby tak můžete zapnout autowiring
a přeskočit manuální předávání argumentů. V českém prostředí je autowiring poměrně populární díky bundlům jako Kutny, Skrz a Symnedi.
Jak to v praxi vypadá?
Dřívější dlouhý zápis
# services.yml
services:
myService:
class: MyBundle\MyService
arguments: [ @dependency1, @dependency2 ]
dependency1:
class: MyBundle\Dependency1
dependency2:
class: MyBundle\Dependency2
nyní můžeš zkrátit na
# services.yml
services:
myService:
class: MyBundle\MyService
autowire: true
Jak to funguje?
Dependency Injection container zanalyzuje konstruktor služby a:
- pokud jsou služby dostupné → předá je
- pokud ne → registruje je jako privátní služby
Jak je to s interface?
Místo konkrétního typu služby můžeš vyžádat interface, který služba implementuje. Ale co když máme více služeb jednoho interface (typické pro chain pattern)? Stačí u dané služby explicitně uvést:
# services.yml
services:
dependency1:
class: MyBundle\Dependency1
autowiring_types: MyBundle\MyInterface
Chceš vědět víc? Mrkni na pull-request
2. Logičtější složky
Symfony 3 full-stack s sebou přináší řád. Zbaví nás chaosu ve složce /app
.
Jak?
Dočasné soubory, logy, nastavení pro PHPUnit, konzolové soubory…
To vše má nyní jasné umístění oddělené od kódu naší aplikace.

Console skripty najdeš nyní ve složce
/bin
. Dočasné soubory /cache
a /logs
pak ve složce /var
.Testy pak v příkazové řádce spustíš jednoduše přes phpunit
.
3. Symfony profiler v novém kabátku
Pro programátora je důležitý nejen přehledný kód, ale i přehledné meta-informace o aplikaci. Ty si v Symfony snadno zobrazí pomocí Symfony Profileru.
Ten už zobrazoval tolik informací, že se v něm programátor začal ztrácet. Po 4 letech se konečně dočkal flat designu.
Důležité informace a hlavně chybové hlášky jsou teď mnohem čitelnější.
Srovnání staré a nové verze

Dříve bylo těžké se rychle zorientovat ve velkém množství informací.
Teď ty důležité najdeš hned na začátku stránky

Zajímá tě víc? Mrkni na pull-request
4. Micro Kernel
Velkou radost budou mít vývojáři menších aplikací, kteří si rádi užívají komfort ekosystému full-stack Symfony. Před pár dny, 5. listopadu, byl do FrameworkBundle přidán Micro Kernel.
Ten je vhodný právě na aplikace, které vyžadují jednoduchou konfiguraci, bundly a na které Silex nestačí.
Co Micro Kernel přinese:
- nevyžaduje žádné další konfigurační soubory
- umožňuje přidání extension bez bundlů
- podporuje routování
Jak takový Micro Kernel vypadá?
<?php
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Routing\RouteCollectionBuilder;
class ConcreteMicroKernel extends Kernel
{
use MicroKernelTrait;
public function halloweenAction()
{
return new Response('halloween');
}
public function registerBundles()
{
return [new FrameworkBundle()];
}
protected function configureRoutes(RouteCollectionBuilder $routes)
{
$routes->add('/', 'kernel:halloweenAction');
}
protected function configureContainer(ContainerBuilder $containerBuilder, LoaderInterface $loader)
{
$containerBuilder->loadFromExtension('framework', [
'secret' => '$ecret',
]);
$containerBuilder->setParameter('title', 'Symfony 3 is painless');
}
}
Zajímá tě víc? Mrkni na pull-request
Teď už víš…
- Že verze 2.8 bude LTS a vyjde spolu s verzí 3.0.
- Jak ti autowiring ušetří práci při psaní definicí služeb.
- Jak si uklidit složku
/app
, aby to dávalo smysl. - Že práce s profilerem bude daleko přehlednější.
- A že pro malé aplikace máš k dispozici Micro Kernel.
V Symfony zase vědí…
- Že když programátor může sáhnout po jednoduším řešení, udělá to.
Proto se snaží, aby jeho použití bylo bez překážek.
Už máš chuť si to vyzkoušet? Příště popíšu, jak to rozjet v Symfony 3.
Už v Symfony děláš léta a chceš posdílet zkušenosti?
Nebo tě Symfony zatím jen láká a rád by se o něm dozvěděl více? Přijd si pokecat na pravidelné měsíční srazy v Praze a Brně.
Přehled komentářů