diff --git a/src/BBRouter/Route.php b/src/BBRouter/Route.php index 0ca8e64..a73728e 100755 --- a/src/BBRouter/Route.php +++ b/src/BBRouter/Route.php @@ -1,14 +1,16 @@ 'Continue', 101 => 'Switching Protocols', - // Successful 2xx 200 => 'OK', 201 => 'Created', @@ -97,7 +98,6 @@ class Route{ 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', - // Redirection 3xx 300 => 'Multiple Choices', 301 => 'Moved Permanently', @@ -107,7 +107,6 @@ class Route{ 305 => 'Use Proxy', 306 => '(Unused)', 307 => 'Temporary Redirect', - // Client Error 4xx 400 => 'Bad Request', 401 => 'Unauthorized', @@ -127,7 +126,6 @@ class Route{ 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', - // Server Error 5xx 500 => 'Internal Server Error', 501 => 'Not Implemented', @@ -138,104 +136,123 @@ class Route{ ); //======================================================= - function execute(){ - foreach ($this->_before as $key => $before){ - if(!in_array($key, $this->_middlewares_to_ignore) && !$this->_ignore ){ + function execute() { + foreach ($this->_before as $key => $before) { + if (!in_array($key, $this->_middlewares_to_ignore) && !$this->_ignore) { call_user_func($before); } } - - foreach ($this->_callback as $callback){ - if(is_string($callback)){ + + foreach ($this->_callback as $callback) { + if (is_string($callback)) { $segments = explode('@', $callback); $class = new $segments[0](); + + $r = new \ReflectionMethod($segments[0], $segments[1]); + + if (sizeof($r->getParameters()) > 0 && $r->getParameters()[0]->getClass() != NULL) { + $element; + $element = $r->getParameters()[0]->getClass()->name; + $element = new $element; + $element->load($this->_params['id']); + $this->_params['id'] = $element; + } $class->{$segments[1]}(...array_values($this->_params)); - }else{ + } else { + $r = new \ReflectionFunction($callback); + if(sizeof($r->getParameters()) > 0 && $r->getParameters()[0]->getClass() != NULL){ + $element; + $element = $r->getParameters()[0]->getClass()->name; + $element = new $element; + $element->load($this->_params['id']); + $this->_params['id'] = $element; + } call_user_func_array($callback, $this->_params); } } - foreach ($this->_after as $after){ + foreach ($this->_after as $after) { call_user_func($after); } } - function prepare(){ + function prepare() { $this->_segments = explode('/', $this->_uri); - foreach ($this->_segments as $segment){ - if( strpos($segment, 'i:') > -1 ){ + foreach ($this->_segments as $segment) { + if (strpos($segment, 'i:') > -1) { $this->_regex .= "\/[0-9]+"; - }else if( strpos($segment, 'h:') > -1 ){ + } else if (strpos($segment, 'h:') > -1) { $this->_regex .= "\/[A-z]+"; - }else if( strpos($segment, ':') > -1 ){ + } else if (strpos($segment, ':') > -1) { $this->_regex .= "\/[A-z0-9]+"; - }else{ - $this->_regex .= "\/".$segment; + } else { + $this->_regex .= "\/" . $segment; } } $this->_regex = ltrim($this->_regex, '\/'); $this->_regex = "/\/" . $this->_regex . "$/"; } - function create_indexes(){ - foreach ($this->_segments as $key => $segment){ - if(preg_match('/\[.*?\]$/', $segment)){ - $segment = trim( trim( $segment, '[' ), ']'); + function create_indexes() { + foreach ($this->_segments as $key => $segment) { + if (preg_match('/\[.*?\]$/', $segment)) { + $segment = trim(trim($segment, '['), ']'); $param = explode(':', $segment); - $this->_params[ $param[1] ] = $this->_uri_segments[$key]; + $this->_params[$param[1]] = $this->_uri_segments[$key]; } } } - function set_uri($uri){ + function set_uri($uri) { $this->_uri = $uri; return $this; } - function get_segments(){ + function get_segments() { return $this->_segments; } - function do_block(){ + function do_block() { $this->_block = true; return $this; } - function not_block(){ + + function not_block() { $this->_block = false; return $this; } - function do_ignore(){ + function do_ignore() { $this->_ignore = true; return $this; } - function not_ignore(){ + + function not_ignore() { $this->_ignore = false; return $this; } - function middleware_ignore($name = ''){ + function middleware_ignore($name = '') { $this->_middlewares_to_ignore[] = $name; return $this; } - function middleware_add($name = ''){ - $this->_before[$name] = $function; + function middleware_add($name = '') { + $this->_before[$name] = $function; } - - function middleware_append($name = '', $function){ - $this->_before[$name] = $function; - } - - function set_weight($weigth = 0){ + function middleware_append($name = '', $function) { + $this->_before[$name] = $function; + } + + function set_weight($weigth = 0) { $this->_weight = $weigth; return $this; } - function set_http_error($code = 400, $message = null){ - if($message == null){ + function set_http_error($code = 400, $message = null) { + if ($message == null) { $message = self::$http_messages[$code]; } @@ -247,13 +264,13 @@ class Route{ return $this; } - function match($uri){ + function match($uri) { //Wildcards allways match - if(in_array('*', $this->_verb) || $this->_uri == '*'){ + if (in_array('*', $this->_verb) || $this->_uri == '*') { return true; } - if( preg_match($this->_regex, $uri) ){ + if (preg_match($this->_regex, $uri)) { $this->_uri_segments = explode('/', $uri); $this->create_indexes(); return true; @@ -261,4 +278,6 @@ class Route{ return false; } + } +