Komponenty frameworka Symfony przydatne w codziennej pracy w innych systemach

Kategoria: Webmastering Data publikacji: 2 komentarze

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.

Dowiedz się więcej o BrowserKit

Komentarze (2)

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