Symfony po krůčkách – MicroKernel

V dnešním díle seriálu Symfony po krůčkách se zaměříme na novinku, a to MicroKernel. Symfony tak bude menší, svižnější, ale přitom pořád full stack. Můžeme tedy konečně říci, že i Symfony je microframework!

Seriál: Symfony po krůčkách (18 dílů)

  1. Symfony po krůčkách – Event Dispatcher 30.11.2015
  2. Symfony Console jako první rande se Symfony 7.12.2015
  3. Symfony po krůčkách – Filesystem a Finder 14.12.2015
  4. Symfony po krůčkách – Paralýza možností? OptionsResolver tě zachrání 21.12.2015
  5. Symfony po krůčkách – spouštíme procesy 4.1.2016
  6. Symfony po krůčkách – Translation – překlady jednoduše 11.1.2016
  7. Symfony po krůčkách – Validator (1) 18.1.2016
  8. Symfony po krůčkách – Validator (2) 25.1.2016
  9. Symfony po krůčkách – Routing 1.2.2016
  10. Symfony po krůčkách – MicroKernel 9.2.2016
  11. Konfigurujeme Symfony pomocí YAMLu 16.2.2016
  12. Symfony po krůčkách – oblékáme MicroKernel 23.2.2016
  13. Symfony po krůčkách – ClassLoader 29.2.2016
  14. Symfony po krůčkách – Twig 8.3.2016
  15. Symfony po krůčkách – Twig II. 15.3.2016
  16. Symfony po krůčkách – DomCrawler a CssSelector 23.3.2016
  17. Symfony po krůčkách – HTTP fundamentalista 12.4.2016
  18. Symfony po krůčkách – ušli jsme pořádný kus 19.4.2016

Symfony od verze 3.0 (2.8) obsahuje nově trait MicroKernel, který ti na menších “projektech” výrazně zjednodušší práci. Už si nemusíš lámat hlavu s tím, jestli projekt psát v Symfony nebo ne, prostě to udělej! Důvody typu “Je to zbytečně moc velké” jsou ty tam.

Představ si, že ti klient zadá microweb, který má mít 3 stránky: Homepage, O firmě a Kontakt. Můžeš to napsat v čistém HTML, Silexu nebo Slimu. Ale co když klient bude každý měsíc posílat nové požadavky na úpravy a web se bude postupně rozrůstat třeba do formy eShopu? Není pak jednodušší rovnou použít lightweight Symfony a zjednodušit si do budoucna život? Je!

Výhody oproti Silexu (nebo Slimu)

  • full stack
  • lze jednoduše přejít na klasické Symfony
  • Twig
  • Anotace v kontrolerech (@Route, @Method, @Template…)
  • možnost použití bundlů, které máš rád

Srovnání s klasickým Symfony, Silexem a Slimem

Počet souborů Celková velikost
Symfony 3.0 full stack 8.200 48 MB
Symfony 3.0 MicroKernel 7.000 39 MB
Silex 825 4,2 MB
Slim 225 1,3 MB

Do srovnání jsem zahrnul navic i Silex a Slim, který je sice hubený, ale neobsahuje Twig.

Proč raději MicroKernel a ne full stack?

Z tabulky je patrné, že Symfony MicroKernel není o moc menší a neobsahuje ani o moc méně souborů než klasické Symfony, tak proč bych ho měl používat? Především kvůli rychlosti. A to jak rychlosti zpracování požadavků (méně bundlů = větší rychlost), ale i kvuli rychlosti vývoje. Na výše zmíněném mini webu pro klienta, který chce jen tři stránky, si to v příštím článku ukážeme. A ještě si k tomu přidáme kontaktní formulář!

Pojďme si to zkusit!

Vše zkouším na PHP 7 a Symfony 3.

Nejdříve si vytvoříme nějakou složku, třeba SymfonyMicroKernel, a v ní spustíme instalaci Symfony pomocí Composeru (pokud nevíš, co je Composer, tak se to honem rychle douč, tvůj život dostane nový smysl).

composer require "symfony/symfony:^3.0"

V minimalismu je síla

Udělejme si „Hello, world!“ v jednom souboru (index.php).

<?php

// index.php

require __DIR__ . '/vendor/autoload.php';

use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
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;
use Symfony\Component\HttpFoundation\Request;

class MicroKernel extends Kernel
{
    use MicroKernelTrait;

    public function registerBundles()
    {
        return [new Symfony\Bundle\FrameworkBundle\FrameworkBundle()];
    }

    protected function configureRoutes(RouteCollectionBuilder $routes)
    {
        $routes->add('/', 'kernel:indexAction', 'homepage');
        $routes->add('/hello/{name}', 'kernel:indexAction', 'index');
    }

    protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader)
    {
        $c->loadFromExtension('framework', ['secret' => 'ThisTokenIsNotSoSecretChangeIt']);
    }

    public function indexAction($name = "Fantomas")
    {
        return new Response(sprintf('Hello, %s!', $name));
    }
}

$app = new MicroKernel('dev', true);
$app->loadClassCache();
$app->handle(Request::createFromGlobals())->send();

Nezapomeň, že Symfony bude chtít vytvořit složky cache a logs (přímo v rootu) a bude do nich chtít zapisovat. Návod na nastavení najdeš v dokumentaci.

Tímto jsi vytvořil první „Hello, World!“ appku. Otevři si v prohlížeči index.php/hello/Dennis a uvidíš “Hello, Dennis!”.

Hello, Symfony!

Hello, Symfony!

Závěrem

Jak jsem napsal na Symfony blogu, myslím si, že MicroKernel znamená smrt pro Silex, který už nyní poněkud umírá.

V příštím článku se podíváme, jak obléknout MicroKernel do Symfony struktury a vytvoříme si miniweb pro našeho fiktivního klienta.

MicroKernel je ideální pro začátečníky. Nebojte si hrát :-)

Děkuji Tomášovi za cenné rady při psaní mého prvního článku.

Ahoj, jsem Dennis Fridrich a od 14 let mě baví PHP. Navíc miluju Symfony a všechny moderní věciiii jako GitHub, PhpStorm, Bower, jQuery, Bootstrap, DigitalOcean, Heroku, Twig…

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

Komentáře: 6

Přehled komentářů

Honza K. Spatne routy?
Honza K. Re: Spatne routy?
Dennis Fridrich Re: Spatne routy?
Dennis Fridrich symfony/framework-bundle
rapemer Použití MicroKernel v kombinaci s klasickým?
Dennis Fridrich
Zdroj: https://www.zdrojak.cz/?p=16979