Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Composing PHP Applications with Middleware (PHP World 2016)

44a352b02a91a9e841da7533bc5d9b8e?s=47 Josh Butts
November 16, 2016
76

Composing PHP Applications with Middleware (PHP World 2016)

44a352b02a91a9e841da7533bc5d9b8e?s=128

Josh Butts

November 16, 2016
Tweet

Transcript

  1. Composing PHP Applications with Middleware Josh Butts PHP World 2016

  2. About Me • VP of Engineering, offers.com • Austin PHP

    Organizer • Play competitive Skee Ball • github.com/jimbojsb • @jimbojsb 2
  3. PSR-7 Lets Start With 3

  4. What is PSR-7 • FIG standard for HTTP messages •

    A collection of interfaces • By itself, has nothing specific to do with middleware 4
  5. Request - Historically • $_SERVER, $_GET, $_POST, etc • apache_request_headers()

    • php://input 5
  6. Response - Historically • header() • http_response_code() • header_list() •

    echo 6
  7. URI - Historically • parse_url() • parse_str() • http_build_query() 7

  8. DID WE END UP HERE? How in the hell 8

  9. PSR-7 Enter 9

  10. But first - More History • 2014 - everyone* has

    gone out and built and object model of HTTP • Hello World for writing a framework • None of them are compatible • Symfony\HttpFoundation widely used 10
  11. PSR-7 is a collection of Interfaces 11

  12. Concrete Implementations of PSR-7 • Zend\Diactoros • GuzzleHTTP\Psr7 • Slim\Http

    12
  13. MIDDLEWARE I thought this talk was about 13

  14. What is middleware? • Turns a Request into a Response

    • Stackable • Reusable • Dispatachable 14
  15. PHP Copied This Trend • Node.js Connect • Ruby Rack

    • Python WSGI • Even StackPHP 15
  16. Express.js is getting it right • All middleware all the

    way down • Even error handlers are middleware • Even the app instance itself is middleware 16
  17. Components of a PHP Middleware App • PSR-7 implementation •

    Collection of middleware • Middleware dispatcher • Any other libraries that will actually do business logic for you 17
  18. Pick a dispatcher • Zend-Stratagility • Relay • Radar •

    Slim v3 • Zend Expressive 18
  19. Pick a PSR-7 Implementation • Do not write one •

    Unless you’re using Slim already just use Zend/Diactoros 19
  20. What does a middleware look like? 20 <?php $middleware =

    function( \Psr\Http\Message\RequestInterface $request, \Psr\Http\Message\ResponseInterface $response, callable $next) { // do the actual stuff };
  21. It might also look like this 21 <?php $middleware =

    function( \Psr\Http\Message\RequestInterface $request, callable $next) { // do some stuff };
  22. PSR-15 • There is still some debate as to which

    is better • It’s likely the standard will not pass along the response • Lots of existing middleware out there that would not meet this spec 22
  23. LETS LOOK AT CODE All that’s fine 23

  24. QUESTIONS? 24

  25. GITHUB.COM/JIMBOJSB/ MIDDLEWARE-TALK 25

  26. JOIND.IN/TALK/AF8F4 I’d love your feedback 26