Symfony UX – prostszy frontend i lepsze doświadczenie dla deweloperów

Koniec roku to dobry czas na podsumowania, prawda? Ostatnio sporo myślałem o tym, jak bardzo chciałem w minionych miesiącach dołożyć swoją cegiełkę do Symfony UX, ale finalnie mi się nie udało. Żeby trochę nadrobić i uciszyć swoje sumienie, postanowiłem podzielić się moimi przemyśleniami i doświadczeniami, które opisywałem w serii postów na X. Ten artykuł to ich podsumowanie – krótko o tym, czym jest Symfony UX, dlaczego warto się nim zainteresować i jak poszczególne komponenty mogą realnie ułatwić życie backendowym programistom.

1
27.02
2025
Author:
Jakub Tobiasz

Symfony UX – co to takiego?

Symfony UX to most pomiędzy światem backendu a frontendem. Dostarcza narzędzia i koncepcje, takie jak Asset Mapper, Twig Components, Stimulus czy Live Components, które upraszczają pracę z warstwą frontową i sprawiają, że staje się ona bardziej dostępna dla backendowych deweloperów.

Z pomocą Symfony UX można tworzyć bogatsze, bardziej dynamiczne doświadczenia użytkownika – bez konieczności posiadania zaawansowanej wiedzy frontendowej. Oto kilka kluczowych komponentów, którym warto się przyjrzeć.

Asset Mapper

Asset Mapper to jeden z najważniejszych elementów Symfony UX. Ale czym właściwie jest?

To komponent, który pozwala zarządzać zasobami frontendowymi – JavaScriptem, CSS-em, grafikami – bezpośrednio w projekcie Symfony. Eliminuje potrzebę korzystania z klasycznych narzędzi do budowania frontendu i sprawia, że integracja zasobów jest prostsza, a ich serwowanie w aplikacji – automatyczne.

Jak działa bez Node.js? Symfony UX wykorzystuje narzędzia dostępne jako gotowe binarki – nie trzeba instalować dodatkowego oprogramowania. Na przykład sensiolabs/AssetMapperTypeScriptBundle pobiera binarkę kompilującą pliki TypeScript do JavaScript, konfiguruje proces (przez komendę asset-map:compile) i... gotowe! Tak samo działa to z SCSS-em i innymi narzędziami.

Zanim sięgniesz po Reacta, Vue, Svelte czy pozostałe frameworki, zadaj sobie pytanie: czy naprawdę potrzebujesz bundlera w projekcie Symfony? Jeśli chcesz tylko wprowadzić odrobinę dynamiki – rozważ Hotwire, czyli trzon Symfony UX.

Dlaczego warto korzystać z Asset Mapper?

  • Eliminuje potrzebę oddzielnego procesu budowania frontendu.

  • Świetnie współpracuje z Symfony.

  • Idealny do projektów, w których liczy się prostota, a pełne frameworki frontendowe byłyby przesadą.

Asset Mapper ma swoje ograniczenia, np. mniejszą elastyczność niż zewnętrzne bundlery, ale jego zalety czynią go świetnym rozwiązaniem dla wielu projektów Symfony.

Moje przemyślenia: Pracując z Asset Mapperem, zdałem sobie sprawę, jak bardzo obniża on próg wejścia dla backendowców, którzy do tej pory omijali frontend szerokim łukiem. Jego prostota świetnie wpisuje się w filozofię Symfony – skupienie na funkcjonalności bez zbędnych komplikacji.

Twig Components – nowe spojrzenie na szablony

Twig Components zmieniły podejście do renderowania w Symfony. To usługa skonfigurowana do wyświetlania konkretnego szablonu – coś jak nowoczesny komponent frontendowy, ale po stronie Twig.

Dotychczas, jeśli chcieliśmy wstawić dynamiczny fragment w środku strony Twig, mieliśmy dwie opcje:

  1. Przekazać wszystkie dane z kontrolera do szablonu.

  2. Użyć {{ render(controller(...)) }}.

Pierwsze podejście bywało uciążliwe. Drugie przypominało nieco komponent Twig, ale było obarczone wadami – to osobne żądanie HTTP, więc dane trzeba było przekazywać jako parametry zapytania. Mało wygodne.

Przez lata w Syliusie korzystaliśmy z tego podejścia w niektórych miejscach, bo nie mieliśmy lepszego rozwiązania. Jak widać na zrzutach ekranu, dzięki Twig Components można przekazywać całe obiekty, czego nie da się zrobić w kontrolerach, które przyjmują tylko skalary lub tablice jako parametry zapytania.

Twig Components vs. renderowane kontrolery

Wcześniej dynamiczne fragmenty w Twig wymagały albo pełnego przekazania danych z kontrolera, albo render(controller(...)). Twig Components to upraszcza:

  • Można przekazywać całe obiekty, nie tylko skalary.

  • Można używać składni podobnej do HTML: ()

To sprawia, że szablony są bardziej czytelne i łatwiejsze w utrzymaniu. Umożliwia to także budowanie własnych systemów komponentów – np. mapowanie HTML-a do komponentów zgodnych z design systemem.

Dodatkowe funkcje dostępne tylko w Twig Components:

  • Składnia HTML-owa:

  • Warianty: np.

  • Możliwość przekazywania treści w tagach

Możemy też zbudować cały system – np. dla każdego komponentu Bootstrapa tworzymy Twig Component. Zamiast

# Przykład:
<twig:Button type="primary">Submit</twig:Button>

# Zamiast:
<button class="btn btn-primary">Submit</button>

Moje przemyślenia: Wprowadzenie Twig Components zmieniło moje podejście do szablonów. Praca stała się bardziej modularna, a możliwość przekazywania obiektów zamiast tablic – szczególnie przy złożonych danych – okazała się prawdziwym game changerem.

Stimulus – pomost między backendem a frontendem

Stimulus to lekki framework JS i kolejna mocna strona Symfony UX. Pozwala dodawać dynamiczne zachowania do aplikacji przy minimalnym kodzie i bez złożonych procesów buildowania.

Nie trzeba przepisywać aplikacji na Reacta – wystarczy dodać Stimulus.

Na przykład w Syliusie używamy Stimulus do dynamicznego wyświetlania błędów formularzy. Dzięki zdarzeniom takim jak initialize i connect, można łatwo reagować na zmiany w DOM – zarówno po załadowaniu strony, jak i przy aktualizacjach AJAX-owych.

Jak Symfony UX wykorzystuje Stimulus? Stimulus to serce wielu paczek Symfony UX. Służy głównie do „bindowania” – wystarczy oznaczyć element atrybutem data-controller="symfony--ux-chartjs--chart", a Stimulus sam zainicjalizuje np. Chart.js.

Co więcej – Symfony UX upraszcza to jeszcze bardziej. Zamiast ręcznie wpisywać data-controller=..., można użyć funkcji Twig, np. render_chart(...).

Zalety Stimulus:

  • Nie wymaga procesu buildowania.

  • Ma niski próg wejścia dla backendowców.

  • Dobrze integruje się z Symfony.

Code Example: Przykład lifecycle eventu w Stimulusie:

initialize() {
    console.log('Initializing the Stimulus controller!');
    // Declare a mutation observer
}

connect() {
    console.log('Stimulus controller connected!');
    // Check for the first time when mounted
}

Użycie w Twig:

{{ stimulus_controller('CompoundFormErrors') }}

Choć Stimulus nie zastąpi pełnych frameworków jak React czy Vue w bardziej złożonych przypadkach, świetnie sprawdza się tam, gdzie nie ma dedykowanego zespołu frontendowego, a trzeba poprawić UX.

Moje przemyślenia: Stimulus zaskoczył mnie równowagą między prostotą a możliwościami. Dla backendowców takich jak ja, to idealne narzędzie, by poprawić UX bez wchodzenia głęboko w frontendowe frameworki. Działa gładko z Symfony – trudno o lepszy wybór w wielu scenariuszach.

Live Components – proste interakcje w czasie rzeczywistym

Live Components to kolejny krok w kierunku dynamicznych interfejsów – i to bez pisania własnego JavaScriptu.

W Syliusie wykorzystujemy je m.in. do:

  • Dynamicznego aktualizowania statystyk na dashboardzie,

  • Zarządzania atrybutami produktu bez zbędnego kodu JS,

  • Błyskawicznego feedbacku w formularzach (np. generowanie slugów, aktualizacja kolekcji).

Przykład: Wcześniej aktualizacja statystyk na żywo wymagała 160 linii JavaScriptu. Teraz – zero. Wszystko działa dzięki gotowym funkcjom Live Components.

Moje przemyślenia: Live Components zrobiły na mnie ogromne wrażenie. Możliwość budowania interfejsów czasu rzeczywistego wyłącznie w PHP to duży przełom. Wykorzystałem je intensywnie w panelu administracyjnym Sylius 2.0 i efekty były zarówno wydajne, jak i eleganckie. Te komponenty naprawdę dają frontendowe możliwości backendowym developerom.

Wnioski i co dalej? Symfony UX to nie tylko zestaw narzędzi. To nowe podejście do tworzenia aplikacji. Dla backendowców to prawdziwe wsparcie w budowaniu dynamicznych, nowoczesnych interfejsów – bez konieczności zagłębiania się w frontend.

Gdy dzieliłem się wiedzą w codziennych postach na X, zauważyłem, jak bardzo Symfony UX porządkuje pracę. Ułatwia, upraszcza i daje nowe spojrzenie na development.

W przyszłości planuję dalej zgłębiać temat Symfony UX i dzielić się kolejnymi wnioskami na blogu. A jeśli chcesz dowiedzieć się czegoś więcej,  polecam:

Mam nadzieję, że ten artykuł zachęci Cię do eksplorowania Symfony UX. Daj znać w komentarzu, jeśli masz pytania lub chcesz podzielić się swoimi doświadczeniami!

← Back to Blog
pattern

Need help implementing Symfony UX?

Skontaktuj się z nami, by umówić się na krótką, bezpłatną konsultację. Podczas rozmowy omówimy Twoje potrzeby i przedstawimy optymalne podejście do realizacji projektu.