Komponenty frameworka Symfony przydatne w codziennej pracy w innych systemach
Symfony to drugi pod względem popularności framework w języku PHP. Jest on złożony z reużywalnych komponentów, które w bardzo prosty sposób można wykorzystywać również w aplikacjach na frameworkach takich jak Laravel czy witrynach opartych na WordPressie. W tym artykule opiszę kilka przykładów komponentów Symfony, których miałem okazję używać poza pełnym frameworkiem, z którego pochodzą.
Symfony składa się z wielu komponentów przydatnych w codziennej pracy programisty PHP. Co ciekawe, największy konkurent Symfony, czyli framework Laravel, oparty jest na komponentach Symfony. W tym artykule przedstawię jedynie kilka przykładów. Poniżej znajduje się link do indeksu wszystkich komponentów Symfony, do którego również warto zajrzeć!
Zobacz wszystkie komponenty Symfony
HttpClient
HttpClient to prosty w obsłudze i wygodny klient HTTP. Za lekką warstwą abstrakcji ukrywa on nieprzejrzyste szczegóły związane z obsługą żądań HTTP w PHP za pomocą mechanizmów takich jak cURL. Standardowe żądanie typu GET jest bardzo proste:
use Symfony\Component\HttpClient\HttpClient; function getLatestSymfonyLtsVersion(): string { $httpClient = HttpClient::create(); $response = $httpClient->request('GET', 'https://symfony.com/releases.json'); $data = $response->toArray(); return $data['symfony_versions']['lts']; }
Żądanie typu POST z obsługą formatu JSON również jest bajecznie proste:
use Symfony\Component\HttpClient\HttpClient; function createUser(string $name, string $job): array { $httpClient = HttpClient::create(); $response = $httpClient->request('POST', 'https://reqres.in/api/users', [ 'json' => ['name' => $name, 'job' => $job], ]); return $response->toArray(); }
Dowiedz się więcej o HttpClient
Validator
Mechanizm walidacji Symfony jest dosyć prosty w obsłudze, ale jednocześnie bardzo funkcjonalny i elastyczny. Można go w wygodny sposób rozszerzać i tworzyć własne walidatory dopasowane do potrzeb swojej aplikacji. Definiowanie zasad walidacji jest dostępne w kodzie PHP, ale także przy użyciu adnotacji lub plików w formacie YAML.
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Validation; $user = [ 'name' => 'administrator', 'password' => 'admin123', 'email' => 'admin@example;com', ]; $constraints = [ new Assert\Collection([ 'name' => [new Assert\Required()], 'password' => [new Assert\Length(['min' => '10'])], 'email' => [new Assert\Email()], ]), new Assert\All([ new Assert\NotBlank(), ]), ]; $validator = Validation::createValidator(); $errors = $validator->validate($user, $constraints);
Zmienna $errors
z powyższego przykładu zawiera wygodną tablicę z błędami walidacji oraz komunikatami błędów dla użytkownika końcowego (opcjonalnie już przetłumaczonymi na język interfejsu użytkownika). W procesie deweloperskim możemy zrzutować ten obiekt na ciąg znaków, aby szybko sprawdzić wynik:
Array[password]: This value is too short. It should have 10 characters or more. Array[email]: This value is not a valid email address.
Dowiedz się więcej o Validatorze
DomCrawler
DomCrawler to parser kodu HTML i XML. Stanowi on wygodną w obsłudze warstwę abstrakcji na mechanizmy parsowania HTML/XML dostępne w PHP. Aby uprzyjemnić sobie pracę, warto doinstalować do tego komponentu dodatek umożliwiający korzystanie z selektorów CSS.
Poniższy przykład pokazuje, jak sparsować stronę główną mojego bloga, aby pobrać informacje o najnowszych artykułach.
use Symfony\Component\DomCrawler\Crawler; use Symfony\Component\HttpClient\HttpClient; $httpClient = HttpClient::create(); $response = $httpClient->request('GET', 'https://tomaszgasior.pl/blog'); $crawler = new Crawler($response->getContent()); $articles = $crawler->filter('.site-contents-wrapper article'); $data = $articles->each(function (Crawler $article) { $title = $article->filter('h2 a'); $date = $article->filter('time'); return [ 'title' => $title->text(), 'date' => $date->attr('datetime'), 'url' => $title->attr('href'), ]; });
Dowiedz się więcej o DomCrawlerze
VarDumper
VarDumper to komponent bardzo przydatny podczas procesu deweloperskiego. Dostarcza on zamiennik dla var_dump()
w postaci dużo bardziej rozbudowanej funkcji dump()
.
Output funkcji dump()
jest czytelnie sformatowany w CLI, a w kontekście HTML jest również interaktywny — poszczególne elementy tablic i obiektów można wygodnie rozwijać. Mamy też do dyspozycji funkcję dd()
, czyli wygodny skrót dla dump(); die;
.
VarDumper dostarcza także dump server, do którego można przekierować dumpowane dane i zbierać w jednym miejscu. Jest to przydatne, gdy nie chcemy uszkadzać outputu aplikacji, a także przy debugowaniu kodu uruchamianego asynchronicznie poza kontekstem przeglądarki.
Możliwości dostarczane przez VarDumper można też uzyskać przy użyciu dodatku Xdebug po odpowiedniej konfiguracji środowiska PHP i edytora kodu. Zaletą VarDumper jest jednakże brak konieczności uprzedniego przygotowania tego narzędzia do pracy.
Dowiedz się więcej o VarDumperze
BrowserKit
BrowserKit to komponent Symfony symulujący przeglądarkę internetową. Jest on niezwykle przydatny w testach automatycznych. Umożliwia nawigowanie po historii przeglądarki, klikanie linków, wypełnianie formularzy i parsowanie kodu strony (przy użyciu DomCrawlera).
Istnieją trzy implementacje BrowserKita, których można używać zamiennie:
- HttpBrowser: korzysta z komponentu HttpClient do komunikacji HTTP. Jego przewagą nad bezpośrednim użyciem HttpClient jest wygodna obsługa historii przeglądarki i ciasteczek.
- PantherClient: korzysta z przeglądarki Google Chrome lub Mozilla Firefox uruchomionej w trybie headless do komunikacji HTTP. Dzięki temu umożliwia wykonywanie logiki JavaScript po stronie klienta. Symfony Panther jest oddzielnie rozwijanym składnikiem.
- KernelBrowser: nie wykonuje komunikacji HTTP, a symuluje żądania bezpośrednio do kernela frameworka Symfony. Z oczywistych względów jest to integralny składnik frameworka niedostępny jako oddzielny komponent.
Komentarze (2)
SP
Jaki jest powód korzystania przez Ciebie z PHP w roku 2022?
Tomasz Gąsior
PHP to znakomity język programowania, doskonale nadający się do tworzenia aplikacji backendowych wystawiających API oraz aplikacji MPA. W oparciu o PHP powstało przez ostatnie dwie dekady wiele systemów takich jak WordPress czy Magento, a także wiele aplikacji dedykowanych — to wszystko trzeba utrzymywać i rozwijać. Inne języki programowania mają swoje zalety, natomiast PHP również je ma: posiada bardzo rozbudowany ekosystem rozwiązań i narzędzi. Zdecydowanie w 2022 roku warto znać PHP.
Dodaj komentarz