Přejít k navigační liště

Zdroják » PHP » 4 žhavé novinky v Symfony 3

4 žhavé novinky v Symfony 3

Články PHP

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.

Nálepky:

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

Komentáře

Odebírat
Upozornit na
guest
7 Komentářů
Nejstarší
Nejnovější Most Voted
Já

Díky za přehled! Autowiring mě moc nerajcuje (ostatně stačí se podívat do diskuze ke commitu, že to není jen nástroj pro růžovou budoucnost, ale i tak dobře ho mít…), profiler už používám, je supr a původní složky byly poměrně nelogické, dobře že se rozhodli vyhodit var a bin do rootu. Většinu změn api už jsem zaregistroval přechodem na 2.8-dev, kdy vesměs všechno funguje jako v předchozí verzi a změny jsou označeny jako @deprecated takže je to v IDE dobře vidět přičemž v docbloku je většinou naznačena alternativa. Kdyby tahle štábní kultura fungovala i jinde byla by to paráda…

Já

Ani ne, jen jsem upgradoval vnitrnosti projektu v 2.6 a rovnou se rozhodl jit s dobou. S3 jsem se trochu bal a precejen LTS je LTS…

Lukáš Brzák

MicroKernel se bude určitě hodit třeba pro menší AJAXové operace, kde není potřeba nic jiného než repository nebo spojení do databáze a ušetří se trochu těch systémových prostředků…

Už si nějakou dobu hraju s 2.8-dev a nový vzhled profileru je rozhodně přínos. Teď je otázkou, jak dlouho bude trvat všem zajímavým projektům migrace na 3.0. Bohužel v dnešní době (pekla) závislostí na cizích projektech to bude pravděpodobně trochu pomalejší nástup. Projekty jako je Sonata, Sylius apod. v blízké době asi nepředpokládají migraci na 3.0, což je škoda. Když se podívám, kolik deprecated volání teď běžná aplikace psaná v 2.3 – 2.7 mají, tak se toho trochu bojím :-) Ale uvidíme ….

Jinak se těším na další článek :-)

Rostislav Vítek

Narazil jsem na jednu chybičku: pro zapnutí autowiringu v services.yml zde máte autowiring: true, což nefunguje. Správně by mělo být autowire: true.

TypeScript 7 v Go: rychlejší buildy, chybějící API

Betaverze TypeScriptu 7.0 ukazuje víc než rychlejší tsc. Microsoft převádí kompilátor a jazykovou službu z původní kódové základny psané v TypeScriptu a běžící jako JavaScript do Go, přidává paralelní typovou kontrolu a připravuje novou editorovou část postavenou na LSP. Pro část nástrojů ale nepůjde o prostou výměnu binárky: TypeScript 7 zatím nemá stabilní náhradu dnešního Compiler API.

Prolog nezmizel. Jen dnes žije v jiných nástrojích

Prolog nezmizel. Jeho hlavní myšlenku dnes potkáváme v nástrojích, které se Prologu na první pohled nepodobají: v CodeQL pro analýzu kódu, v Rego pro policy-as-code, v Z3 pro práci s omezeními a v Leanu pro formální důkazy. Každý řeší jiný problém, ale všechny připomínají totéž: někdy je lepší popsat vztahy, pravidla, omezení nebo tvrzení než vrstvit další if.