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

Zdroják » PHP » Symfony po krůčkách – MicroKernel

Symfony po krůčkách – MicroKernel

Články PHP

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!

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.

Komentáře

Subscribe
Upozornit na
guest
6 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Honza K.

Kdyz jsem si to zkousel, tak nefunguje routa do rootu /. Pokud prohodim jejich poradi v souboru, zase nefunguje ta druha.

Fatal error: Uncaught exception ‚Symfony\Component\Routing\Exception\ResourceNotFoundException‘ in symfonyMicroKernel\cache\dev\symfonyMicroKernelDevUrlMatcher.php:39 Stack trace: #0

Honza K.

Problem je v tom, ze jsou obe ty routy stejne pojmenovane, rekl bych.

Lukáš Brzák

Ahoj, díky za článek, MicroKernel je určitě velký krok kupředu. Dost často pro AJAXové operace vytvářím malé single-file aplikace, které využívají jen některé komponenty (Yaml::parse na konfigurace parameters.yml, Request, JsonResponse a připojení do databáze). Díky tomu šetřím prostředky serveru a rychlost odezvy je opravdu jinde.

Co mě ale zajímá…. Už jste někdo zkoušel použít MicroKernel společně s klasickým full-stackem? To znamená, že hlavní aplikace zůstane, ale pouze určité operace (které nevyžadují inicializaci všech bundlů) se budou provádět přes MicroKernel …. určitě by šlo přes .htaccess přesměrovat část na MicroKernel a zbytek na klasický :-)

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.