/** * 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.'); } }