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!
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.
Přehled komentářů