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

Odebírat
Upozornit na
guest
6 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
Zobrazit všechny komentáře
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ý :-)

Stav SIMD v Rustu v roce 2025

Různé
Komentáře: 0
SIMD - neboli Single Instruction, Multiple Data - znamená, že procesor může jednou instrukcí zpracovat více datových prvků najednou. Typicky to znamená, že místo sčítání dvou čísel přičtete dvě sady čísel paralelně. To může přinést výrazné zrychlení například při zpracování obrazu, audia nebo numerických výpočtů. Pokud již SIMD znáte, tato tabulka je vše, co budete potřebovat. A pokud s SIMD teprve začínáte, tabulku pochopíte do konce tohoto článku

GPUI Component: moderní Rust GUI komponenty pro cross-platform desktop aplikace

Různé
Komentáře: 0
GPUI Component je open-source Rust knihovna rozšiřující framework GPUI o více než 60 moderních, nativních a multiplatformních UI komponent. Staví na deklarativním přístupu, stateless renderování a jednoduchém API inspirovaném Reactem či Yew. Díky optimalizovanému výkonu, podpoře témat a flexibilním layoutům umožňuje rychlý vývoj desktopových aplikací, jako je například trading nástroj Longbridge Pro. Knihovna je licencována pod Apache 2.0 a dostupná na GitHubu.