|  | @@ -49,6 +49,26 @@ class LuRoute {
 | 
		
	
		
			
			| 49 | 49 |          $this->middleware[] = $middleware;
 | 
		
	
		
			
			| 50 | 50 |      }
 | 
		
	
		
			
			| 51 | 51 |  
 | 
		
	
		
			
			|  | 52 | +    private function getClassName(\ReflectionParameter $param) {
 | 
		
	
		
			
			|  | 53 | +        preg_match('/\[\s\<\w+?>\s([\w]+)/s', $param->__toString(), $matches);
 | 
		
	
		
			
			|  | 54 | +        return isset($matches[1]) ? $matches[1] : null;
 | 
		
	
		
			
			|  | 55 | +    }
 | 
		
	
		
			
			|  | 56 | +
 | 
		
	
		
			
			|  | 57 | +    private function getParam(\ReflectionParameter $param, $value)
 | 
		
	
		
			
			|  | 58 | +    {
 | 
		
	
		
			
			|  | 59 | +        $typedValue = null;
 | 
		
	
		
			
			|  | 60 | +        $className = $this->getClassName($param);
 | 
		
	
		
			
			|  | 61 | +        if (is_null($className)) {
 | 
		
	
		
			
			|  | 62 | +            $typedValue = $value;
 | 
		
	
		
			
			|  | 63 | +        }
 | 
		
	
		
			
			|  | 64 | +        else {
 | 
		
	
		
			
			|  | 65 | +            $class = $param->getClass();
 | 
		
	
		
			
			|  | 66 | +            $json = json_decode($value, true);
 | 
		
	
		
			
			|  | 67 | +            $typedValue = call_user_func_array(array($class->getName(), "jsonDeserialize"), array($json));
 | 
		
	
		
			
			|  | 68 | +        }
 | 
		
	
		
			
			|  | 69 | +        return $typedValue;
 | 
		
	
		
			
			|  | 70 | +    }
 | 
		
	
		
			
			|  | 71 | +
 | 
		
	
		
			
			| 52 | 72 |      private function getOptions($httpMethod, $url, $controller, $method, $permissions, $middleware)
 | 
		
	
		
			
			| 53 | 73 |      {
 | 
		
	
		
			
			| 54 | 74 |          if (!is_array($permissions)) {
 | 
		
	
	
		
			
			|  | @@ -77,7 +97,9 @@ class LuRoute {
 | 
		
	
		
			
			| 77 | 97 |          $route->setMethod($httpMethod);
 | 
		
	
		
			
			| 78 | 98 |          $this->routes[] = $route;
 | 
		
	
		
			
			| 79 | 99 |  
 | 
		
	
		
			
			| 80 |  | -        return [function() use($controller, $method)
 | 
		
	
		
			
			|  | 100 | +        $ctrl = $this;
 | 
		
	
		
			
			|  | 101 | +
 | 
		
	
		
			
			|  | 102 | +        return [function() use($controller, $method, $ctrl)
 | 
		
	
		
			
			| 81 | 103 |          {
 | 
		
	
		
			
			| 82 | 104 |              $reflect = new \ReflectionMethod($controller, $method);
 | 
		
	
		
			
			| 83 | 105 |              $params = $reflect->getParameters();
 | 
		
	
	
		
			
			|  | @@ -85,10 +107,17 @@ class LuRoute {
 | 
		
	
		
			
			| 85 | 107 |              $args = array();
 | 
		
	
		
			
			| 86 | 108 |              foreach ($params as $param) {
 | 
		
	
		
			
			| 87 | 109 |                  if ($param->isOptional()) {
 | 
		
	
		
			
			| 88 |  | -                    $args[$param->getName()] = LuBusiness::getParam($param->getName(), $param->getDefaultValue());
 | 
		
	
		
			
			|  | 110 | +                    $value = null;
 | 
		
	
		
			
			|  | 111 | +                    if (LuBusiness::hasParam([$param->getName()])) {
 | 
		
	
		
			
			|  | 112 | +                        $value = $ctrl->getParam($param, LuBusiness::getParam($param->getName()));
 | 
		
	
		
			
			|  | 113 | +                    }
 | 
		
	
		
			
			|  | 114 | +                    else {
 | 
		
	
		
			
			|  | 115 | +                        $value = $param->getDefaultValue();
 | 
		
	
		
			
			|  | 116 | +                    }
 | 
		
	
		
			
			|  | 117 | +                    $args[$param->getName()] = $value;
 | 
		
	
		
			
			| 89 | 118 |                  }
 | 
		
	
		
			
			| 90 | 119 |                  else {
 | 
		
	
		
			
			| 91 |  | -                    $args[$param->getName()] = LuBusiness::checkParam($param->getName());
 | 
		
	
		
			
			|  | 120 | +                    $args[$param->getName()] = $ctrl->getParam($param, LuBusiness::checkParam($param->getName()));
 | 
		
	
		
			
			| 92 | 121 |                  }
 | 
		
	
		
			
			| 93 | 122 |              }
 | 
		
	
		
			
			| 94 | 123 |  
 |