Exemplo n.º 1
0
 /**
  * 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");
         }
     }
 }