From 0e02aa0ca3dd6bef68ed93545fad799409e58ee4 Mon Sep 17 00:00:00 2001 From: ahwelp Date: Mon, 20 Aug 2018 21:22:15 -0300 Subject: [PATCH] Implementing middlewares 0.1 --- src/BBRouter/Route.php | 21 ++++++++++++++++-- src/BBRouter/RouteCollection.php | 37 ++++++++++++++++++++++++-------- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/BBRouter/Route.php b/src/BBRouter/Route.php index 1340f89..01f5af0 100755 --- a/src/BBRouter/Route.php +++ b/src/BBRouter/Route.php @@ -76,6 +76,10 @@ class Route{ */ public $_ignore = false; + /* + * Middlewares to remove from the list + */ + public $_middlewares_to_ignore = Array(); /* * From Klein * HTTP status List @@ -135,12 +139,16 @@ class Route{ //======================================================= function execute(){ - foreach ($this->_before as $before){ - call_user_func($before); + foreach ($this->_before as $key => $before){ + if(!in_array($key, $this->_middlewares_to_ignore) ){ + call_user_func($before); + } } + foreach ($this->_callback as $callback){ call_user_func_array($callback, $this->_params); } + foreach ($this->_after as $after){ call_user_func($after); } @@ -199,6 +207,15 @@ class Route{ $this->_ignore = false; return $this; } + + function middleware_ignore($name = ''){ + $this->_middlewares_to_ignore[$name]; + } + + function middleware_add($name = '', $function){ + $this->_before[$name] = $function; + } + function set_weight($weigth = 0){ $this->_weight = $weigth; return $this; diff --git a/src/BBRouter/RouteCollection.php b/src/BBRouter/RouteCollection.php index 149d7b1..3421479 100755 --- a/src/BBRouter/RouteCollection.php +++ b/src/BBRouter/RouteCollection.php @@ -7,13 +7,21 @@ class RouteCollection{ private static $_route_collection; public $_uri = '/'; + public $_routes = Array(); + private $_verb = ''; private $_loaded_files = Array(); private $_errors = Array(); + private $_default_middlewares = Array(); + + private static $_verbs_whitelist = Array('*', 'GET','POST','PUT','PATCH','DELETE', 'CLI'); + + private static $_verbs_web = Array('GET','POST','PUT','PATCH','DELETE'); + //SINGLETON============================================== @@ -57,7 +65,6 @@ class RouteCollection{ } } } - return $instance; } @@ -74,26 +81,25 @@ class RouteCollection{ } /* - * GET | POST | PUT | PATCH | DELETE + * GET | POST | PUT | PATCH | DELETE | CLI * */ private function define_verb(){ - $verbs_whitelist = Array('*', 'GET','POST','PUT','PATCH','DELETE', 'CLI'); $verb = ''; if(isset($_POST['_method'])){ - $verb = $_POST['_method']; + $verb = strtoupper( $_POST['_method'] ); }else if(php_sapi_name() == "cli"){ $verb = "CLI"; }else{ - $verb = $_SERVER['REQUEST_METHOD']; + $verb = strtoupper( $_SERVER['REQUEST_METHOD'] ); } - if(in_array($verb, $verbs_whitelist)){ + if(in_array($verb, $this->_verbs_whitelist)){ $this->_verb = $verb; }else{ - echo 'Invalid HTTP Verb'; + echo 'Invalid Verb'; } } @@ -133,6 +139,9 @@ class RouteCollection{ //Yup. Execute the route $ROUTE = $route; + + $route->_before($this->_default_middlewares); + $route->execute(); if(!$route->_ignore){ @@ -242,10 +251,13 @@ class RouteCollection{ $route = new Route(); if(is_array( $verb ) ){ - $route->_verb = $verb; + $route->_verb = array_map('strtoupper', $verb); + }else if( strtoupper($verb) == 'WEB' ){ + $route->_verb[] = self::_verbs_web; }else{ - $route->_verb[] = $verb; + $route->_verb[] = strtoupper( $verb ); } + $route->_uri = $uri; $route->_callback[] = $callback; $route->_weight = $weight; @@ -263,6 +275,13 @@ class RouteCollection{ $this->_routes[] = $route; } + function addMiddleware($name = '', $function){ + $this->_default_middlewares[$name] = $function; + } + + /* + * + */ static function on_http_error($function){ $instance = self::getInstance(); $instance->_errors[] = $function;