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é.

  1. Routing Podle URL a HTTP metody vybere odpovídající controller.
  2. Controller Převezme vstup, ověří jeho formát a předá práci aplikační službě.
  3. Služba Vyhodnotí obchodní pravidla a spolupracuje s databází či jinou službou.
  4. Worker nebo Console Stejný případ použití může vyvolat příkaz nebo handler zprávy mimo HTTP požadavek.
  5. 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.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.