▶️ Honza představíuje PHP microframework s plnou podporou standardu PSR, který je velmi jednoduchý a zároveň dokonalý. Přidává i pár tipů pro validaci příchozích requestů, end-to-end testování bez nutnosti poslat HTTP request a ukázku, jak je možné integrovat Expressive do existující aplikace a využít její modelovou vrstvu.
7. PSR-15: Middleware
• Zpracovává příchozí request a buď:
•Vrátí response
•Deleguje zpracování na další vrstvu
• PsrHttpServerMiddlewareInterface
FB facebook.com/peckadesign TW peckadesignZend Expressive Jan Kadeřábek
10. PSR-15: Generating response
FB facebook.com/peckadesign TW peckadesignZend Expressive Jan Kadeřábek
• Každý handler nebo middleware který
generuje odpověd by měl sestavit instanci
ResponseInterface nebo továrnu, která je
shopna ji vytvořit
11. PSR-15: Handling exceptions
FB facebook.com/peckadesign TW peckadesignZend Expressive Jan Kadeřábek
• Existuje komponenta (middleware), která chytá
výjimky a převádí je na response
• Obaluje veškerý proces v aplikaci
13. Zend Expressive
FB facebook.com/peckadesign TW @peckadesignZend Expressive Jan Kadeřábek
• Minimalistický PSR-15 PHP framework
• Umí nic a zároveň vše
• Snadno konfigurovatelný
• Průhledná a jednoduchá implementace
• https://docs.zendframework.com/zend-expressive/
14. Routing
• Expressive nenabízí žádný defaultní router
• Pouze adaptéry integrující nějakou implementace routeru
• Aura.Router
• FastRoute
• zend-mvc Router
• ZendExpressiveRouterRouterInterface
• integrujte si svůj vlastní router
FB facebook.com/peckadesign TW peckadesignZend Expressive Jan Kadeřábek
16. Dependency injection
• Expressive nenabízí žádný defaultní DI container
• PSR-11
•PsrContainerContainerInterface
• Opět tři základní balíčky
•zend-servicemanager
•pimple-interop
•aura.di
FB facebook.com/peckadesign TW peckadesignZend Expressive Jan Kadeřábek
17. Templating
• Expressive nenabízí žádný defaultní templatovací engine
• Vhodné na API
•Vracím pouze ZendDiactorosResponseJsonResponse
• Šablony použiju jenom když potřebuju
•ZendExpressiveTemplateTemplateRendererInterface
• Handlery a middleware nejsou závislé na konkrétním enginu
FB facebook.com/peckadesign TW peckadesignZend Expressive Jan Kadeřábek
20. Error handling
• Vyhazovat výjimky a mít vrstvu která je bude odchytávat
• Upravený PHP error_reporting
• ZendStratigilityMiddlewareErrorHandler
• Whoops error handler pro vývoj
• Detailní informace o chybě jako v Tracy
• Možnost konfigurace výstup (HTML, JSON)
FB facebook.com/peckadesign TW peckadesignZend Expressive Jan Kadeřábek
24. Co nám to umožňuje?
FB facebook.com/peckadesign TW @peckadesignZend Expressive Jan Kadeřábek
• Vytvořit pěknou validaci a mapování requestů
• Možnost si snadno sestavit aplikaci pro:
•Jednoduché E2E testování
•Integraci do existující aplikace
25. Validace příchozích requestů
FB facebook.com/peckadesign TW @peckadesignZend Expressive Jan Kadeřábek
• Kontrolovat data v requestu
• Standardizovaná odpověd API v případě chyby
• Mapovat data na pěkné DTO
34. Mapování přímo z routeru?
FB facebook.com/peckadesign TW @peckadesignZend Expressive Jan Kadeřábek
• V definici routy určit mapovaný objekt
• Handler nebo middleware už by dostal rovnou objekt requestu
38. Testování
FB facebook.com/peckadesign TW @peckadesignZend Expressive Jan Kadeřábek
• Unit testy na handlery
• E2E testy
•Spuštění celé aplikace bez posílání HTTP requestů díky PSR-7 abstrakci
51. Zamyšlení na závěr
FB facebook.com/peckadesign TW @peckadesignZend Expressive Jan Kadeřábek
• Soustředím se pouze na jeden oddělený problém
•Ostatní deleguji dál
• Framework je pouze obálka, která drží pohromadě jednotlivé komponenty
•Dispatcher handlerů
• Je MVC přežitek?
52. FB facebook.com/peckadesign TW @peckadesign
Děkuji za pozornost
Zend Expressive Jan Kadeřábek
https://github.com/jankaderabek/expressive-playground