From the blog
Posted 2023-12-14
From the blog
Posted 2018-10-16
Have you used Node.js?
For those of my readers unfamiliar with Node.js, it's a server-side JavaScript
framework that provides the ability to create, among other things, network
services. To do so, it provides an event loop, which allows for such things as
asynchronous processing.
In the PHP ecosystem, a group of Chinese developers have been creating an
extension that provides many of the same capabilities as Node.js. This
extension, called Swoole, allows you to create web
servers with asynchronous capabilities. In many cases, the asynchronous
capabilities are handled via coroutines, allowing you to write normal,
synchronous code that still benefits from the asynchronous nature of the system
event loop, allowing your server to continue responding to new requests as they
come in!
We've been gradually adding and refining our Swoole support
in Expressive, and recently
issued a stable release that will work with any PSR-15
request handler. In this post, I'll enumerate what I feel are the reasons for
considering Swoole when deploying your PHP middleware application.
From the blog
Posted 2018-01-23
Yesterday, following a unanimous vote from its Core Committee,
PHP-FIG formally accepted the proposed
PSR-15, HTTP Server Handlers
standard.
This new standard defines interfaces for request handlers and middleware.
These have enormous potential impact on the PHP ecosystem, as they provide
standard mechanisms for writing HTTP-facing, server-side applications.
Essentially, they pave the way for developers to create re-usable web components
that will work in any application that works with PSR-15 middleware or request
handlers!
From the blog
Posted 2017-03-30
I faced an interesting question recently with regards to middleware: What
happens when we go from a convention-based to a contract-based approach when
programming?
Convention-based approaches usually allow for
duck-typing; with middleware, it
means you can write PHP callables
— usually closures — and just expect them
to work.
Contract-based approaches use interfaces. I think you can see where this is
going.
From the blog
Posted 2017-01-26
We all know the standard HTTP request methods and status codes, right? Or do we?
We definitely know whether or not they should be integers or strings, and/or how
string values should be normalized, right?
And our IDEs can totally autocomplete them, right?
Oh, that's not the case?
From the blog
Posted 2016-05-16
Enrico just returned from phpDay,
where he spoke about Expressive
and the upcoming Zend Framework 3. One piece of feedback he brought back had to
do with how people perceive they should be building Expressive applications:
many think, based on our examples, that it's completely configuration driven!
As it turns out, this is far from the truth; we developed our API to mimic that
of traditional microframeworks, and then built a configuration layer on top of
that to allow making substitutions. However, it's not only possible, but quite
fun, to mix and match the two ideas!
From the blog
Posted 2016-04-17
I've been intending to play with React for some time,
but, for one reason or another, kept putting it off. This past week, I carved
some time finally to experiment with it, and, specifically, to determine if
serving PSR-7 middleware was possible.
From the blog
Posted 2016-01-28
A few hours ago, we pushed Expressive 1.0.
This is a huge milestone for the ZF3 initiative; I've even called it the
cornerstone. It signals a huge shift in direction for the project, returning to
its roots as a component library. Expressive itself, however, also signals
the future of PHP applications we envision: composed of layered, single-purpose
PSR-7 middleware.
From the blog
Posted 2015-07-28
Yesterday, a question tagged #psr7 on Twitter caught my eye:
#psr7 Request::getHeader($name) return array of single string instead of strings in #Slim3? cc: @codeguy pic.twitter.com/ifA9hCKAPs
@feryardiant (tweet)
The image linked provides the following details:
When I call $request->getHeader('Accept') for example, I was expected that I'll get something like this:
Array(
[0] => text/html,
[1] => application/xhtml+xml,
[2] => application/xml,
)
but, in reallity I got this:
Array(
[0] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
)
Is it correct?
In this post, I'll explain why the behavior observed is correct, as well as
shed a light on a few details of header handling in
PSR-7.
From the blog
Posted 2015-05-18
From the blog
Posted 2015-01-26
PSR-7 is now accepted!!!
~~I'm still hearing some grumbles both of "simplify!" and "not far enough!"
so I'm writing this posts to demonstrate usage of the currently published
interfaces, and to illustrate both the ease of use and the completeness and
robustness they offer.~~
First, though I want to clarify what PSR-7 is attempting.
From the blog
Posted 2015-01-08
As I've surveyed the successes and failures of ZF1 and ZF2, I've started
considering how we can address usability: how do we make the framework more
approachable?
One concept I've been researching a ton lately is middleware. Middleware
exists in a mature form in Ruby (via Rack), Python
(via WSGI), and Node (via
Connect /
ExpressJS); just about every language has some
exemplar. Even PHP has some examples already, in
StackPHP and Slim Framework.
The basic concept of middleware can be summed up in a single method signature:
function (request, response) { }
The idea is that objects, hashes, or structs representing the HTTP request and
HTTP response are passed to a callable, which does something with them. You
compose these in a number of ways to build an application.