Slovník pojmů
Symfony: co to je a kdy dává smysl
Symfony poskytuje strukturu a nástroje pro dlouhodobě rozvíjené PHP aplikace, ne hotová obchodní pravidla.
Stručná definice
Framework pro HTTP aplikace i práci mimo prohlížeč.
Symfony poskytuje hotové části pro běžné problémy: HTTP požadavky, routing, controllery, konfiguraci, validaci, zabezpečení, příkazovou řádku i zpracování zpráv. Usnadňuje jejich složení do aplikace, která se má udržovat a postupně rozvíjet.
Není to jeden nerozdělitelný celek. Symfony Components lze instalovat samostatně i mimo framework; například Console Component může pohánět importní příkaz bez celé webové aplikace. Teprve framework skládá komponenty do konvencí pro konfiguraci, služby a běh aplikace.
Použití
Kde Symfony dává smysl
Hodí se tam, kde aplikace nebude jednorázový formulář, ale má se bezpečně integrovat a dlouhodobě rozvíjet.
- backendové REST API pro webový či mobilní klient
- interní systém s oprávněními, workflow a administrací
- objednávky, katalog nebo napojení na dopravce v e-commerce
- importní a exportní služby spouštěné příkazem nebo plánovačem
- asynchronní zpracování e-mailů, synchronizací a delších úloh
Praktický příklad
Import výdejních míst dopravce
Console příkaz načte XML a doplňkové API dopravce, převede záznamy na vstupní data a validuje externí identifikátor, adresu i souřadnice. Aplikační služba rozhodne, zda se výdejní místo vytvoří, aktualizuje nebo označí za neaktivní.
Doctrine uloží změny do databáze a chybné záznamy se zalogují s důvodem. Pokud je zdroj velký, může příkaz předávat dávky přes Messenger workerům. HTTP API pak čte už uložená data a nezávisí při každém požadavku na dostupnosti dopravce.
Jak funguje
Průchod požadavku API aplikací
Přesná podoba se liší podle aplikace, základní odpovědnosti ale mohou být zřetelné.
- Routing Podle URL a HTTP metody vybere odpovídající controller.
- Controller Převezme vstup, ověří jeho formát a předá práci aplikační službě.
- Služba Vyhodnotí obchodní pravidla a spolupracuje s databází či jinou službou.
- Worker nebo Console Stejný případ použití může vyvolat příkaz nebo handler zprávy mimo HTTP požadavek.
- Odpověď Aplikace vrátí JSON, HTML nebo konzistentní validační a chybový stav.
Důležité části
Co framework přináší do každodenní práce
Framework vytváří společné místo pro technické obavy. Neurčuje však obchodní hranice aplikace za vývojáře.
Routing a controllery
Routing mapuje adresu na vstupní bod. Controller má být tenký: překládá požadavek a odpověď, nemá pohltit pravidla cenotvorby ani několik integrací najednou.
DI container a konfigurace
Container vytváří služby a předává jim závislosti. Autowiring usnadňuje běžné případy; výjimečné vazby, hodnoty a více implementací je lepší vyjádřit explicitně.
Validace, formuláře a Security
Validator ověřuje tvar a pravidla vstupu. Security řeší identitu a oprávnění. Form Component se hodí hlavně pro serverové formuláře, čisté API pracuje častěji s JSON a validací.
Console, Messenger a Doctrine
Console se hodí pro importy a údržbu. Messenger může práci předat workeru, ale potřebuje retry, monitoring a idempotentní handlery. Doctrine je samostatný nástroj pro databázi, ne součást frameworku.
Provoz a údržba
Verze, testy a ladění
Přínos Symfony se projeví i mimo samotný request.
- Dlouhodobě podporované verze
- Dávají týmu předvídatelnější horizont údržby. Aktualizace přesto vyžadují vlastní plán a ověření kompatibility.
- Profiler
- Ve vývojovém prostředí pomáhá sledovat request, služby, logy, dotazy a výkon; není náhradou produkčního monitoringu.
- Testovací prostředí
- Aplikaci lze nastartovat v testu, zavolat endpoint nebo službu a ověřit spolupráci s oddělenou testovací infrastrukturou.
- Secrets a prostředí
- Citlivé hodnoty nepatří do kódu. Konfigurace má rozlišit lokální vývoj, testy a produkci bez nejasných rozdílů.
Výhody a omezení
Struktura pomáhá, pokud odpovídá složitosti projektu
Přínosy
- sjednocuje HTTP aplikaci, příkazové úlohy i asynchronní práci
- komponenty lze znovu použít i mimo celý framework
- nabízí prověřené nástroje pro DI, validaci, bezpečnost, testy a ladění
- dává jasný základ pro dlouhodobě udržované aplikace
Na co pozor
- pro malý jednorázový skript může být celý framework zbytečně robustní
- autowiring nenahrazuje porozumění skutečným závislostem
- obchodní logika v controllerech, listenerech či entitách zhoršuje orientaci
- fronty, cache, databáze a monitoring potřebují provozní rozhodnutí i mimo framework
Hranice použití
Symfony není důvod přidávat abstrakci ke každé třídě.
U malého, krátkodobého skriptu nebo opravdu jednoduchého endpointu může být přímější samostatná komponenta či menší řešení. U API, integrací a systémů s očekávaným vývojem ale framework s jasnou konfigurací často sníží náklady na další změny.
Míra vrstev se má řídit složitostí konkrétní části. Controller, služba a repository nejsou povinná trojice pro každý soubor; důležité je, aby důležité odpovědnosti a závislosti zůstaly čitelné.
Na co myslet
Framework nenahrazuje návrh a provoz
Před nasazením se vyplatí kontrolovat hranice odpovědností i prostředí, ve kterém aplikace poběží.
- krátké controllery a jasné aplikační služby
- validace vstupu oddělená od autorizace
- konfigurace a secrets bezpečně oddělené podle prostředí
- testy pro obchodní logiku i důležité integrační hranice
- monitoring workerů, chyb a závislostí mimo samotný framework
Časté otázky
Co je dobré o Symfony vědět
Je Symfony programovací jazyk?
Ne. Symfony je framework a sada knihoven pro PHP. PHP je jazyk, ve kterém se framework a jeho komponenty používají.
Musí aplikace používat celý Symfony framework?
Nemusí. Řada Components funguje samostatně. Celý framework pomáhá tam, kde aplikace těží z jednotné konfigurace, HTTP vrstvy a DI containeru.
Je Symfony vhodné jen pro velké aplikace?
Ne. Užitečné může být i pro menší API či interní nástroj. Rozhoduje spíše očekávaný vývoj, integrace a potřeba údržby než počet souborů na začátku.
Je Symfony Messenger automaticky asynchronní?
Ne. Zpráva může být obsloužena synchronně. Asynchronní běh vyžaduje transport a worker, který zprávy odebírá.
Jak Symfony používám v praxi
Symfony je můj hlavní framework pro současné backendy.
Ke frameworku jsem se dostal postupně přes komponenty používané v PrestaShopu, zejména Console, Doctrine a Profiler. Dnes na něm stavím API a integrační služby.