[FEATURE] Added custom boot managers

This commit is contained in:
Simon Sessingø
2016-03-19 16:14:36 +01:00
parent 5483ffe458
commit b29f2ce37d
7 changed files with 131 additions and 42 deletions
+16 -9
View File
@@ -1,8 +1,6 @@
<?php
namespace Pecee\Http;
use Pecee\SimpleRouter\RouterBase;
class Request {
protected static $instance;
@@ -154,16 +152,25 @@ class Request {
return $this->loadedRoute;
}
public function isFormatAccepted($format) {
return (isset($_SERVER['HTTP_ACCEPT']) && stripos($_SERVER['HTTP_ACCEPT'], $format) > -1);
/**
* @param mixed $uri
*/
public function setUri($uri) {
$this->uri = $uri;
}
public function getAcceptFormats() {
if(isset($_SERVER['HTTP_ACCEPT'])) {
return explode(',', $_SERVER['HTTP_ACCEPT']);
}
/**
* @param mixed $host
*/
public function setHost($host) {
$this->host = $host;
}
return array();
/**
* @param mixed $method
*/
public function setMethod($method) {
$this->method = $method;
}
}
+1 -1
View File
@@ -26,7 +26,7 @@ class Response {
$this->httpCode($httpCode);
}
$this->header('Location: ' . $url);
$this->header('location: ' . $url);
die();
}
-7
View File
@@ -1,7 +0,0 @@
<?php
namespace Pecee\SimpleRouter;
interface IRouteEntry {
}
+34 -3
View File
@@ -16,9 +16,9 @@ class RouterBase {
protected $controllerUrlMap;
protected $backStack;
protected $defaultNamespace;
protected $bootManagers;
protected $baseCsrfVerifier;
// TODO: make interface for controller routers, so they can be easily detected
// TODO: clean up - cut some of the methods down to smaller pieces
public function __construct() {
@@ -26,7 +26,8 @@ class RouterBase {
$this->backStack = array();
$this->controllerUrlMap = array();
$this->baseCsrfVerifier = new BaseCsrfVerifier();
$this->request = Request::getInstance();
$this->request = new Request();
$this->bootManagers = array();
$csrf = new CsrfToken();
$token = ($csrf->hasToken()) ? $csrf->getToken() : $csrf->generateToken();
@@ -106,6 +107,18 @@ class RouterBase {
public function routeRequest() {
// Initialize boot-managers
if(count($this->bootManagers)) {
/* @var $manager RouterBootManager */
foreach($this->bootManagers as $manager) {
$this->request = $manager->boot($this->request);
if(!($this->request instanceof Request)) {
throw new RouterException('Custom router bootmanager "'. get_class($manager) .'" must return instance of Request.');
}
}
}
// Verify csrf token for request
if($this->baseCsrfVerifier !== null) {
/* @var $csrfVerifier BaseCsrfVerifier */
@@ -168,6 +181,24 @@ class RouterBase {
$this->defaultNamespace = $defaultNamespace;
}
/**
* @return array
*/
public function getBootManagers() {
return $this->bootManagers;
}
/**
* @param array $bootManagers
*/
public function setBootManagers(array $bootManagers) {
$this->bootManagers = $bootManagers;
}
public function addBootManager(RouterBootManager $bootManager) {
$this->bootManagers[] = $bootManager;
}
/**
* @return RouterEntry
*/
@@ -0,0 +1,10 @@
<?php
namespace Pecee\SimpleRouter;
use Pecee\Http\Request;
abstract class RouterBootManager {
abstract public function boot(Request $request);
}
+4
View File
@@ -32,6 +32,10 @@ class SimpleRouter {
RouterBase::getInstance()->setBaseCsrfVerifier($baseCsrfVerifier);
}
public static function addBootManager(RouterBootManager $bootManager) {
RouterBase::getInstance()->addBootManager($bootManager);
}
public static function get($url, $callback, array $settings = null) {
$route = new RouterRoute($url, $callback);
$route->addSettings($settings);