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
26
I Didn't Know Laravel Could Do That!
jimbojsb
4
870
Make It Searchable (Midwest PHP 2018)
jimbojsb
1
420
High Availability PHP (Nomad PHP January 2018)
jimbojsb
1
170
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
210
Just-In-Time Software Manufacturing (True North PHP 2016)
jimbojsb
1
250
Containerizing PHP Applications (True North PHP 2016)
jimbojsb
0
230
Featured
See All Featured
Are puppies a ranking factor?
jonoalderson
1
3k
It's Worth the Effort
3n
188
29k
How STYLIGHT went responsive
nonsquared
100
6k
How to Talk to Developers About Accessibility
jct
2
140
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
130
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
70
Game over? The fight for quality and originality in the time of robots
wayneb77
1
130
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
GraphQLとの向き合い方2022年版
quramy
50
14k
What's in a price? How to price your products and services
michaelherold
247
13k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
810
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