4 žhavé novinky v Symfony 3

V listopadu 2015 má kromě PHP 7 a Drupalu 8 vyjít i Symfony 3. V tomto článku se dozvíte, kdy vyjde která verze a jaký bude jejich praktický dopad, a také jaké jsou 4 nejzajímavější novinky.

Č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.

Release plan
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.

Release plan
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ší.

Nový designSrovnání staré a nové verze

Starý a nový design
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

 

Odkaz na stránku
Snadno se dostaneš z profileru zpět na stránku

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ě.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 7

Přehled komentářů

...
Tomáš Votruba Re: Díky za přehled!
Re: Díky za přehled!
rapemer Micro Kernel
Tomáš Votruba Re: Micro Kernel
Rostislav Vítek Autowiring
Tomáš Votruba Re: Autowiring
Zdroj: https://www.zdrojak.cz/?p=16406