protected function shouldProcessRoute(Route $route)
 {
     $middlewareRouteFilterConfig = $this->settings['middleware'][$this->getConfigKey()];
     $filterMode = $this->getFilterModeFromFilterConfig($middlewareRouteFilterConfig);
     $routeNames = $middlewareRouteFilterConfig['route_names'];
     $result = in_array($route->getName(), $routeNames);
     return $filterMode === static::INCLUSION ? $result : !$result;
 }
 protected function processAtRoute(Route $route)
 {
     $configKeyName = 'middleware.' . $this->getConfigKey();
     $middlewareRouteFilterConfig = $this->app->config($configKeyName);
     $filterMode = $this->getFilterModeFromFilterConfig($middlewareRouteFilterConfig);
     $routeNames = $middlewareRouteFilterConfig['route_names'];
     $result = in_array($route->getName(), $routeNames);
     return $filterMode === static::INCLUSION ? $result : !$result;
 }
 /**
  * Api annotation
  * 
  * if you set the \@api annotation this text will be proccess like
  * api description that can be access with app->getApi(), you must set the version
  * of the api description.
  * 
  * if you set the @Route annotation the path will be proccesed like a path
  * definition for this controller and configured in the routing rutine. The 
  * \@RouteName annotation is optional and can be omited, if is omited the route
  * name will be configured in base of the route path.
  * 
  * @Route /new/example
  * @RouteName _new_example
  * @api example.gui
  * 
  * @param \Slim\Http\Request $request
  * @param \Slim\Http\Response $response
  * @param \Slim\Route $route
  */
 public function indexAction($request, $response, $route)
 {
     /**
      * You can use the next params
      * The current request, response and the route
      * 
      */
     return "Hello World !! " . $route->getName();
 }
 /**
  * Get the route information for a given route.
  *
  * @param  Route $route
  * @return array
  */
 protected function getRouteInformation(Route $route)
 {
     $result = [];
     $result['uri'] = $route->getMethods()[0] . ' ' . $route->getPattern();
     $result['name'] = $route->getName() ?: '';
     $result['group'] = '';
     foreach ($route->getGroups() as $group) {
         $result['group'] .= $group->getPattern();
     }
     $callable = $route->getCallable();
     $result['middleware'] = [];
     foreach ($route->getMiddleware() as $middleware) {
         $result['middleware'][] = Closure::bind(function () {
             return get_class($this->callable);
         }, $middleware, DeferredCallable::class)->__invoke();
     }
     if (is_array($callable)) {
         $result['callable'] = get_class($callable[0]) . ':' . $callable[1];
         $reflector = new ReflectionMethod($callable[0], $callable[1]);
     } elseif ($callable instanceof Closure) {
         $result['callable'] = $this->formatVar($callable);
         $reflector = new ReflectionFunction($callable);
     } elseif (is_object($callable)) {
         $result['callable'] = get_class($callable);
         $reflector = new ReflectionMethod($callable, '__invoke');
     } else {
         $result['callable'] = $callable;
         $callable = explode(':', $callable);
         if (isset($callable[1])) {
             $reflector = new ReflectionMethod($callable[0], $callable[1]);
         } else {
             $reflector = new ReflectionMethod($callable, '__invoke');
         }
     }
     $result['file'] = $reflector->getFileName() . ':' . $reflector->getStartLine() . '-' . $reflector->getEndLine();
     return $result;
 }