PHP 8.1 i 8.2 przyniosły named arguments i first-class callables – dwie funkcje które zmieniają sposób pisania kodu. Named arguments eliminują „argument order confusion” i poprawiają czytelność wywołań funkcji z wieloma parametrami. First-class callables zastępują Closure::fromCallable() i [$this, 'method'] czystą składnią func(...).
Produkt pokazywał „In Stock” na stronie produktu mimo że rzeczywiście nie było go na stanie. Klienci składali zamówienia na produkt który nie mógł zostać zrealizowany. Dopiero przy tworzeniu shipmentu pojawiał się błąd. Problem dotyczył produktów konfigurowalnych z MSI. Czas naprawy: 4 godziny.
DDEV to wygodne narzędzie ale nie jedyna droga. Własny stack Docker Compose daje pełną kontrolę: dokładnie te wersje usług których potrzebujesz, własna sieć, integracja z CI/CD, możliwość wdrożenia na dowolnym serwerze bez zmian. Pokażę minimalny ale kompletny stack dla Magento 2 z PHP 8.4, MariaDB 10.6, Redis, OpenSearch i nginx.
Sklep z konfiguracją multi-store (5 sklepów, 3 waluty) zaczął pokazywać błędne ceny – cena w euro pojawiała się na sklepie w złotówkach i odwrotnie. Problem pojawił się po dodaniu nowego sklepu i dotyczył tylko produktów z regułami cen. Czas naprawy: 6 godzin.
Wzorzec Decorator pozwala dynamicznie dodawać zachowanie do obiektu bez modyfikacji jego klasy i bez dziedziczenia. Każdy dekorator opakowuje oryginalny obiekt i rozszerza lub modyfikuje jego działanie. W PHP i Magento 2 to jeden z najczęściej stosowanych wzorców – system pluginów Magento to de facto Decorator zaimplementowany przez framework DI.
Konto administratora zostało zablokowane po ataku słownikowym – 10 000 prób logowania w ciągu godziny. Magento po 6 nieudanych próbach blokuje konto na 30 minut. Problem: atakujący ciągle resetował licznik przez zmianę IP, a prawdziwy admin nie mógł się zalogować. Czas naprawy: 1 godzina.
Union-Find (Disjoint Set Union) to struktura danych do zarządzania zbiorami rozłącznymi. Umożliwia dwie operacje w czasie niemal O(1): sprawdzenie czy dwa elementy należą do tego samego zbioru (Find) i połączenie dwóch zbiorów (Union). Algorytm pojawia się w problemach grafowych, wykrywaniu cykli i grupowaniu elementów. W Magento 2 przydaje się przy łączeniu zduplikowanych klientów i produktów.
Cron Magento 2 przestał działać – zalegało ponad 50 000 niezrealizowanych jobów w tabeli cron_schedule. Emaile transakcyjne nie wychodziły, indeksery nie aktualizowały się, reguły cenowe nie odświeżały. Sklep działał normalnie dla klientów ale „od środka” był zamrożony. Czas naprawy: 3 godziny.
Sklep działał normalnie, ale konwersja nagle spadła o 40% w ciągu jednego dnia. Google Analytics pokazywał ruch na poziomie normy. Problem był niewidoczny gołym okiem – tylko przy konkretnym rozmiarze ekranu przyciski w checkoucie nachodziły na siebie i były nieaktywalne. Czas diagnozy: 3 godziny, naprawy: 30 minut.
GraphQL w Magento 2 to nie tylko API do odczytu – możesz dodać własne typy, queries i mutations. Custom resolver to klasa PHP która odpowiada za pobranie danych dla danego pola lub query. Pokażę kompletną implementację: schemat GraphQL, resolver z autoryzacją, obsługę błędów i testy integracyjne. Na przykładzie query pobierającego historię zamówień klienta z filtrami.
