Esempio n. 1
0
File: get.php Progetto: Borvik/Munla
 /**
  * Gets the requested view.
  */
 public static function cache_view($a)
 {
     $args = func_get_args();
     if (count($args) > 3) {
         throw new InvalidArgumentException('Invalid number of arguments.');
     }
     //string name, [string layout], [array parameters]
     //array route, [controller controller], [array parameters]
     if (is_string($a)) {
         $name = $a;
         $layout = 'default';
         $params = array();
         array_shift($args);
         if (count($args) == 1) {
             //could be string|array
             $nxt = array_shift($args);
             if (is_string($nxt)) {
                 $layout = $nxt;
             } elseif (is_array($nxt)) {
                 $params = $nxt;
             } else {
                 throw new InvalidArgumentException('Invalid argument, second parameter must be a string or an array.');
             }
         } elseif (count($args) == 2) {
             //must be string then array
             $nxt = array_shift($args);
             if (!is_string($nxt)) {
                 throw new InvalidArgumentException('Invalid argument, second parameter must be a string.');
             }
             $layout = $nxt;
             $nxt = array_shift($args);
             if (!is_array($nxt)) {
                 throw new InvalidArgumentException('Invalid argument, third parameter must be an array.');
             }
             $params = $nxt;
         }
         return new view($name, $layout, $params);
     } elseif (is_array($a)) {
         //find via route
         $route = $a;
         $controller = null;
         $layout = 'default';
         $params = array();
         array_shift($args);
         if (count($args) == 1) {
             //could be a controller|array
             $nxt = array_shift($args);
             if (is::of_class($nxt, 'controller', true)) {
                 $controller = $nxt;
             } elseif (is_array($nxt)) {
                 $params = $nxt;
             } else {
                 throw new InvalidArgumentException('Invalid argument, second parameter must be a controller or an array.');
             }
         } elseif (count($args) == 2) {
             $nxt = array_shift($args);
             if (!is::of_class($nxt, 'controller', true)) {
                 var_dump($nxt);
                 throw new InvalidArgumentException('Invalid argument, second parameter must be a controller.');
             }
             $controller = $nxt;
             $nxt = array_shift($args);
             if (!is_array($nxt)) {
                 throw new InvalidArgumentException('Invalid argument, third parameter must be an array.');
             }
             $params = $nxt;
         }
         if (isset($controller)) {
             if (isset($controller->layout)) {
                 $layout = $controller->layout;
             }
             if (isset($controller->view)) {
                 return new view($controller->view, $layout, $params);
             }
         }
         $view = get::route_view($route);
         if ($view !== false) {
             return new view($view, $layout, $params);
         }
         return new view('errors/view_missing', $layout, array_merge($params, array('route' => $route)));
     } else {
         throw new InvalidArgumentException('Invalid argument, first parameter must be a string or an array.');
     }
 }