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