Skip to content

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

License

Notifications You must be signed in to change notification settings

netglue/Expressive-PRG

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Post/Redirect/Get Middleware for Zend Expressive

Intro

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…

Installation

$ composer require netglue/expressive-prg

Usage

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' => [
            PostRedirectGet::class
            // 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…

Tests

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

About

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

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages