Skip to content

ReKungPaw/Backbeard

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Backbeard

Backbeard is yet another DSLish minimum oriented framework for PHP.

Build Status Coverage Status

backbeard

Principle

yield $router($request) => $action();

Usage

<?php
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use Backbeard\Dispatcher;
use Backbeard\ValidationError;

$routingFactory = function ($serviceLocator) {
    yield '/hello' => 'hello';

    $error = (yield ['POST' => '/entry/{id:[0-9]}'] => function ($id) {
        if ($this->getRequest()->getPost()['NAME'] == 'wtf') {
            return ['var1' => 'baz']; // will be render entry.phtml
        } else {
            return new ValidationError(['error message!']);
        }
    });

    yield '/entry/{id:[0-9]}' => function ($id) use ($error) {
        $message = $error ? htmlspecialchars(current($error->getMessages())) :'';
        return "Hello $id ".$message.
        '<form method="POST" action="/entry/'.$id.'">'.
            'NAME<input type="text" name="NAME">'.
        '</form>';
    };

    yield [
      'GET' => '/foo',
      'Header' => [
        'User-Agent' => function($headers){
          if (!empty($headers) && strpos(current($headers), 'Coffee') === 0) {
            return true;
          }
        }
      ]
    ] => 418; // status code "I'm a teapot"

    yield (ServerRequestInterface $request) {
		return true;
    } => function () {
    	/** @var ResponseInterface $this */
    	return $this;
    };
};

(new Dispatcher($routingFactory($serviceLocator)))->dispatch(new Request, new Response);

Install with composer

  • composer require sasezaki/backbeard dev-master

Using As Middleware for zend-stratigility

https://github.com/struggle-for-php/sfp-stratigility-skeleton

  • php composer.phar create-project -s dev struggle-for-php/sfp-stratigility-skeleton path/to/install

    When install finished, you can try running with php built-in web server

  • php -S localhost:8080 -t public/ public/index.php

NOTES

THIS PROJECT IS A PROOF OF CONCEPT FOR GENERATOR BASED ROUTER, AND NOT INTENDED FOR PRODUCTION USE. PLEASE USE AT YOUR OWN RISK.

About

👀 PHP's Generator based routing framework

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 99.9%
  • HTML 0.1%