Jelajahi Sumber

Implementing middlewares 0.1

ahwelp 7 tahun lalu
induk
melakukan
0e02aa0ca3
2 mengubah file dengan 47 tambahan dan 11 penghapusan
  1. 19 2
      src/BBRouter/Route.php
  2. 28 9
      src/BBRouter/RouteCollection.php

+ 19 - 2
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;

+ 28 - 9
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;