2017 © Pedro Peláez
 

library circuit

Microframework - controller+dispatcher

image

brokencube/circuit

Microframework - controller+dispatcher

  • Tuesday, July 10, 2018
  • by brokencube
  • Repository
  • 1 Watchers
  • 3 Stars
  • 962 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 14 Versions
  • 12 % Grown

The README.md

circuit

Latest Stable Version Code Climate, (*1)

Router + Middleware built on top of HTTP Foundation and FastRoute, (*2)

Basic Usage

See FastRoute docs for more info on advanced matching patterns, grouping etc, (*3)

$request = \Symfony\Component\HttpFoundation\Request::createFromGlobals();  // From HTTP Foundation

$options = [];         // Options - allows you to provide alternative internals - see below
$cache = new PSR6();   // PSR6 or 16 cache - can be null
$log = new PSR3();     // PSR-3 compatible log - can be null

$router = new \Circuit\Router($options, $cache, $log);
$router->defineRoutes(function (\Circuit\RouteCollector $r) {
    $r->get('/', 'controllers\Home');                    // Calls \controllers\Home->index($request);
    $r->get('/search', 'controllers\Home@search');       // Calls \controllers\Home->search($request);
    $r->get('/blog/{id}', 'controllers\Blog@index', []); // Calls \controllers\Blog->index($request, $id);
    $r->addGroup('/group', [], function(Circuit\RouteCollector $r) {
        $r->get('/route', 'controllers\GroupRoute@index'); 
    }
}

$router->run($request);  // Dispatch route

Generally:, (*4)

$r->get($route, $controllerName, $middlewareArray);
$r->post($route, $controllerName, $middlewareArray);
$r->addRoute(['GET', 'POST'], $route, $controllerName, $middlewareArray);
$r->addGroup($prefix, $middlewareArray, function(Circuit\RouteCollector $r) {
   // Group routes
};

$controllerName should be in format namespaced\ControllerClass@method (Similar to Laravel), (*5)

Controllers

Controllers must implement the Circuit\Interfaces\Controller interface, (*6)

use Circuit\Interfaces\Controller;
use Psr\Container\ContainerInterface as Container;

class Home implements Controller
{
    protected $container;
    public function __construct(Container $container) 
    {
        $this->container = $container;
    }

    public function index(Request $request)
    {
        return 'Home Page'; // Can also return instances of Response, or an array (will be `json_encode`d);
    }
}

Note: Currently Circuit only supports the "Service Locator" pattern for DI. In future versions, autowiring will be introduced and the interface requirement above will be relaxed., (*7)

Middleware

middleware/AddCookie.php

namespace middleware;

use Circuit\Interfaces\{Middleware, Delegate};
use Symfony\Component\HttpFoundation\{Request, Response, Cookie};

class AddCookie implements Middleware
{
    public function process(Request $request, Delegate $delegate) : Response
    {
        $response = $delegate->process($request);

        $cookie = new Cookie('cookie', 'cookievalue', time() + (24 * 60 * 60));
        $response->headers->setCookie($cookie);

        return $response;        
    }
}

routes.php

Add middleware individually to a route, (*8)

$router->defineRoutes(function (\Circuit\RouteCollector $r) {
  $r->get('/', 'controllers\Home', [new middleware\AddCookie()]);  
}

Or register the middleware in the router, and call it by name, (*9)

$router->registerMiddleware('addcookie', new middleware\AddCookie());
$router->defineRoutes(function (\Circuit\RouteCollector $r) {
  $r->get('/', 'controllers\Home', ['addcookie']);
}

Or add middleware to a group of routes, (*10)

$router->registerMiddleware('addcookie', new middleware\AddCookie());
$router->defineRoutes(function (\Circuit\RouteCollector $r) {
  $r->addGroup('', ['addcookie'], function(Circuit\RouteCollector $r) {
    $r->get('/', 'controllers\Home');  
  }
}

Or add middleware to be run before a route is even matched (this will logically be applied to all routes, as it happens before the matching step. This allows for middleware to modify the route before matching), (*11)

$router->registerMiddleware('addcookie', new middleware\AddCookie());
$router->addPrerouteMiddleware('addcookie');
$router->defineRoutes(function (\Circuit\RouteCollector $r) {
  $r->get('/', 'controllers\Home');  
}

Middleware will be run in the order defined, with preroute middleware always running first, e.g.:, (*12)

$router->addPrerouteMiddleware('middleware1');
$router->defineRoutes(function (\Circuit\RouteCollector $r) {
  $r->addGroup('', ['middleware3', 'middleware4'], function(Circuit\RouteCollector $r) {
    $r->get('/', 'controllers\Home', ['middleware5']);  
  }
}
$router->addPrerouteMiddleware('middleware2');

The Versions

10/07 2018

dev-v3alpha

dev-v3alpha

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

10/05 2018

dev-master

9999999-dev

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

19/01 2018

dev-2alpha

dev-2alpha

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

19/01 2018

2.0.0

2.0.0.0

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

13/12 2017

1.2.5

1.2.5.0

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

13/12 2017

1.2.4

1.2.4.0

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

17/11 2017

1.2.3

1.2.3.0

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

13/11 2017

1.2.2

1.2.2.0

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

19/09 2017

1.2.1

1.2.1.0

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

25/05 2017

1.2.0

1.2.0.0

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

18/05 2017

1.1.1

1.1.1.0

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

18/05 2017

1.1.0

1.1.0.0

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

09/05 2017

1.0.1

1.0.1.0

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller

09/05 2017

1.0.0

1.0.0.0

Microframework - controller+dispatcher

  Sources   Download

MIT

The Requires

 

The Development Requires

mvc dispatcher controller