Middleware to implement the Post/Redirect/Get pattern in Zend Expressive

1.0.1 2017-03-21 16:30 UTC



This is simple middleware that'll help you implement the PRG pattern in your Zend Expressive app.

Based on the original Zend Framework PRG controller plugin.

Uses Zend\Session but performs no configuration of the session itself. I figured this was a sane choice for session management. If you know of a standard session library to typehint against, let me know, but afaik there isn't one…


$ composer require netglue/expressive-prg


First you'll need to register the middleware with your DI container as an invokable with something like:

// use NetglueExpressive\Middleware\PostRedirectGet;

'dependencies' => [
    'invokables' => [
        PostRedirectGet::class => PostRedirectGet::class

Add the middleware to your routes whenever you want to perform a PRG something like this:

'routes' => [
    'some-form' => [
        'name' => 'some-form',
        'path' => '/somewhere',
        'allowed_methods' => ['GET', 'POST'],
        'middleware' => [
            // Your middleware to post process, render templates etc…

Inside your action, the request will have an attribute prg set to either false or the posted data (If any), for example:

$post = $request->getAttribute('prg');
if (false === $post) {
    // No POST has occurred, probably render the form template

// Otherwise, process POST data, validate, store, whatever…

The request attribute name is defined as a constant in PostRedirectGet::KEY

It is possible for the attribute to be null if the request is neither a GET, nor a POST request and your route allows other methods such as PUT, DELETE etc…


$ cd vendor/netglue/expressive-prg
$ composer install
$ phpunit


Netglue makes web based stuff in Devon, England. We hope this is useful to you and we’d appreciate feedback either way :)