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
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ý :-)

Frugal computing: architektura pro dobu dražší infrastruktury

Vývojáři se naučili zrychlovat dotazy, přidávat cache, škálovat služby a hlídat účet za cloud. Frugal computing začíná o jednu otázku dřív: musí se výpočet, přesun dat, volání modelu nebo uložení vůbec stát? Rostoucí spotřeba datových center a nové evropské reportování ho posouvají do návrhu architektury, dřív než do závěrečné poznámky o udržitelnosti v prezentaci.

Odysseus: PewDiePie vydal open-source AI workspace, který běží na vašem vlastním hardwaru

AI
Komentáře: 0
Felix Kjellberg, youtuber se 110 miliony odběratelů, strávil rok učením se programovat a fine-tuningem vlastních AI modelů. Výsledkem je Odysseus – bezplatný, open-source workspace pro práci s umělou inteligencí, který neposílá žádná data do cloudu. Projekt má týden, přes 61 000 hvězdiček na GitHubu a znovu otevírá otázku, komu vlastně patří váš digitální kontext.

Když Git už nestačí: jak izolovat databázový stav pro pokusy AI agentů

Gitová větev vývojářům oddělí kód, ale databáze často zůstává společná. U AI agentů je to slabé místo: rychle spouštějí migrace, mění data a zkoušejí víc cest najednou. Databázová větev jim dá vlastní pracovní prostor, jenže tím práce nekončí. Ještě je potřeba řešit citlivá data, oprávnění, životnost větve i zbytek stavu aplikace.