/** * Ejecuta el controlador que mapeo anteriormente. Segun su definicion en la configuracion se ejecutara al estilo REST * o mediante nombre de funciones * @param array $controller_esp * @param string $uriapp */ protected function executeController($controller_esp, $uriapp = NULL) { $dir = $this->buildDir($controller_esp); $class = $this->buildClass($controller_esp); if (!class_exists($class)) { //Si la clase no existe intento cargarla if (file_exists($dir)) { require_once $dir; } else { //Avisa que el archivo no existe Error::general_error('Controller Error', 'The controller ' . $controller_esp['class'] . ' dont exists'); } } $controller = new $class(); //Agrego los parametros URI $uri_params = UrlUri::uriParams($controller_esp['url'], $uriapp); $dinamic_method = $uri_params['dinamic']; $method = $uri_params['method']; $controller->setUriParams($uri_params['params']); //Analizo si hay parametros en la configuracion if (isset($controller_esp['properties'])) { $this->app->dependenciesEngine->injectProperties($controller, $controller_esp['properties']); } //Saca el metodo HTPP y en base a eso hace una llamada al metodo correspondiente $methodHttp = $_SERVER['REQUEST_METHOD']; if ($dinamic_method) { if (method_exists($controller, $method)) { $controller->{$method}($this->httpRequest, $this->httpResponse); } else { Error::general_error('HTTP Method Error', "The HTTP method {$method} is not supported"); } } else { switch ($methodHttp) { case 'GET': $controller->doGet($this->httpRequest, $this->httpResponse); break; case 'POST': $controller->doPost($this->httpRequest, $this->httpResponse); break; case 'UPDATE': $controller->doUpdate($this->httpRequest, $this->httpResponse); break; case 'DELETE': $controller->doDelete($this->httpRequest, $this->httpResponse); break; case 'HEAD': $controller->doHead($this->httpRequest, $this->httpResponse); break; case 'TRACE': $controller->doTrace($this->httpRequest, $this->httpResponse); break; case 'URI': $controller->doUri($this->httpRequest, $this->httpResponse); break; case "OPTIONS": $controller->doOptions($this->httpRequest, $this->httpResponse); break; case 'CONNECT': $controller->doConnect($this->httpRequest, $this->httpResponse); break; default: Error::general_error('HTTP Method Error', "The HTTP method {$methodHttp} is not supported"); } } }