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

Composing PHP Applications with Middleware (Zendcon 2016)

Josh Butts
October 20, 2016

Composing PHP Applications with Middleware (Zendcon 2016)

With the advent of the PSR-7 standard, middleware has become a household name in the PHP ecosystem. This talk will cover middleware architecture concepts including a comparison of how middleware is being used in PHP versus other languages. We'll look at how to leverage middleware concepts to build applications from scratch as well as combine off-the-shelf components using middleware as the glue. Of course, we'll also look at some downright dirty tricks that middleware lets you get away with as well.

Josh Butts

October 20, 2016
Tweet

More Decks by Josh Butts

Other Decks in Technology

Transcript

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

    Organizer • Play competitive Skee Ball • github.com/jimbojsb • @jimbojsb 2
  2. What is PSR-7 • FIG standard for HTTP messages •

    A collection of interfaces • By itself, has nothing specific to do with middleware 4
  3. 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
  4. What is middleware? • Turns a Request into a Response

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

    • Python WSGI • Even StackPHP 15
  6. 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
  7. 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
  8. Pick a PSR-7 Implementation • Do not write one •

    Unless you’re using Slim already just use Zend/Diactoros 19
  9. 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 };
  10. It might also look like this 21 <?php $middleware =

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

    is better • It’s like the standard will not pass along the response • Lots of existing middleware out there that would not meet this spec 22