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
Josh Butts
November 16, 2016
0
150
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
I Didn't Know Laravel Could Do That!
jimbojsb
4
800
Make It Searchable (Midwest PHP 2018)
jimbojsb
1
370
High Availability PHP (Nomad PHP January 2018)
jimbojsb
1
130
Things Your Application Does When You're Not Looking (PHP Serbia 2017)
jimbojsb
0
250
Containerizing PHP Applications (Lone Star PHP 2017)
jimbojsb
2
290
Containerizing PHP Applications (PHP World 2016)
jimbojsb
0
190
Just-In-Time Software Manufacturing (True North PHP 2016)
jimbojsb
1
230
Containerizing PHP Applications (True North PHP 2016)
jimbojsb
0
200
High Availability PHP (Zendcon 2016)
jimbojsb
1
320
Featured
See All Featured
For a Future-Friendly Web
brad_frost
180
9.9k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Mobile First: as difficult as doing things right
swwweet
224
10k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
32
2.3k
Side Projects
sachag
455
43k
Gamification - CAS2011
davidbonilla
81
5.5k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Context Engineering - Making Every Token Count
addyosmani
5
220
Rails Girls Zürich Keynote
gr2m
95
14k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
114
20k
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