Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Composing PHP Applications with Middleware (PHP...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Josh Butts
November 16, 2016
0
180
Composing PHP Applications with Middleware (PHP World 2016)
Josh Butts
November 16, 2016
Tweet
Share
More Decks by Josh Butts
See All by Josh Butts
Supercharged_Search_-_Longhorn_PHP_2025.pdf
jimbojsb
0
20
I Didn't Know Laravel Could Do That!
jimbojsb
4
830
Make It Searchable (Midwest PHP 2018)
jimbojsb
1
390
High Availability PHP (Nomad PHP January 2018)
jimbojsb
1
160
Things Your Application Does When You're Not Looking (PHP Serbia 2017)
jimbojsb
0
270
Containerizing PHP Applications (Lone Star PHP 2017)
jimbojsb
2
320
Containerizing PHP Applications (PHP World 2016)
jimbojsb
0
200
Just-In-Time Software Manufacturing (True North PHP 2016)
jimbojsb
1
240
Containerizing PHP Applications (True North PHP 2016)
jimbojsb
0
220
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
900
Paper Plane (Part 1)
katiecoart
PRO
0
3.7k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
53
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
130
New Earth Scene 8
popppiees
1
1.5k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
0
300
Are puppies a ranking factor?
jonoalderson
1
2.6k
30 Presentation Tips
portentint
PRO
1
200
The Limits of Empathy - UXLibs8
cassininazir
1
210
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
110
A Soul's Torment
seathinner
5
2.2k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
110
Transcript
Composing PHP Applications with Middleware Josh Butts PHP World 2016
About Me • VP of Engineering, offers.com • Austin PHP
Organizer • Play competitive Skee Ball • github.com/jimbojsb • @jimbojsb 2
PSR-7 Lets Start With 3
What is PSR-7 • FIG standard for HTTP messages •
A collection of interfaces • By itself, has nothing specific to do with middleware 4
Request - Historically • $_SERVER, $_GET, $_POST, etc • apache_request_headers()
• php://input 5
Response - Historically • header() • http_response_code() • header_list() •
echo 6
URI - Historically • parse_url() • parse_str() • http_build_query() 7
DID WE END UP HERE? How in the hell 8
PSR-7 Enter 9
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
PSR-7 is a collection of Interfaces 11
Concrete Implementations of PSR-7 • Zend\Diactoros • GuzzleHTTP\Psr7 • Slim\Http
12
MIDDLEWARE I thought this talk was about 13
What is middleware? • Turns a Request into a Response
• Stackable • Reusable • Dispatachable 14
PHP Copied This Trend • Node.js Connect • Ruby Rack
• Python WSGI • Even StackPHP 15
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
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
Pick a dispatcher • Zend-Stratagility • Relay • Radar •
Slim v3 • Zend Expressive 18
Pick a PSR-7 Implementation • Do not write one •
Unless you’re using Slim already just use Zend/Diactoros 19
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 };
It might also look like this 21 <?php $middleware =
function( \Psr\Http\Message\RequestInterface $request, callable $next) { // do some stuff };
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
LETS LOOK AT CODE All that’s fine 23
QUESTIONS? 24
GITHUB.COM/JIMBOJSB/ MIDDLEWARE-TALK 25
JOIND.IN/TALK/AF8F4 I’d love your feedback 26