Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/06/2011, 10:35
Avatar de destor77
destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
Respuesta: Consultas y Errores raros en Frontcontroller

aca esta el frontcontroller tuve que eliminar la declaracion de atributos:
Código PHP:
Ver original
  1. class Router {
  2.     function __construct($param) {
  3.         $this->servidor = $_SERVER['HTTP_HOST'];
  4.         $this->ubicacion = explode('/',$param);
  5.         if(!defined('PATH_ROOT')) {
  6.             $real = str_replace('core/clases','',str_replace('\\','/',realpath(dirname(__FILE__))));
  7.             define('PATH_ROOT',$real);
  8.         }
  9.         array_pop($this->ubicacion);
  10.         $this->path = implode('/',$this->ubicacion);
  11.  
  12.         if(array_search('admin',$this->ubicacion)) {
  13.             array_pop($this->ubicacion);
  14.             $ruta = implode('/',$this->ubicacion);
  15.             $this->ruta_absoluta = $ruta.'/' ;
  16.         }
  17.         else {
  18.             $ruta = implode('/',$this->ubicacion);
  19.             $this->ruta_absoluta = $ruta.'/' ;
  20.         }
  21.  
  22.         $this->ruta = $_SERVER['DOCUMENT_ROOT'].$ruta.'/';
  23.     }
  24.  
  25.     public function route() {
  26.         include_once(PATH_ROOT.'/configuracion.php');
  27.         $config->set('root',$this->ruta);
  28.  
  29.         $path = $this->ruta;
  30.  
  31.         //valido si no estoy en el root y seteo el nuevo path
  32.         if(strpos($this->path,'admin')) {
  33.             $path = $path.'admin';
  34.             $config->set('urlRoot','http://'.$this->servidor.$this->ruta_absoluta);
  35.         }
  36.         else {
  37.             $path = $path.'website';
  38.             $config->set('urlRoot','http://'.$this->servidor.$this->ruta_absoluta);
  39.         }
  40.  
  41.         $this->loader($config->get('root').$config->get('core'));
  42.  
  43.         if (file_exists($config->get('path_root').'router.php')) {
  44.             // cargo el archivo con las reglas de ruteo
  45.             include $config->get('path_root').'router.php';
  46.         }
  47.  
  48.         $this->routes = ( ! isset($route) OR ! is_array($route)) ? array() : $route;
  49.         unset($route);
  50.  
  51.         echo "routes<pre>";
  52.         print_r( $this->routes );
  53.         echo"</pre>";
  54.         $url = Url::singleton();
  55.         //seteo la url
  56.         $this->uri  = str_replace('.'.$config->get('prefijo'),'',$url->fetchUri());
  57.         echo "uri Server : ".$_SERVER['REQUEST_URI']."<br/>";
  58.         echo "<pre>";
  59.         print_r( $_GET );
  60.         echo"</pre>";
  61.  
  62.         echo "uri: ".$this->uri."<br/>";
  63.         $url->explodeSegments();
  64.         echo "explodesegment<pre>";
  65.         print_r( $url->segments );
  66.         echo"</pre>";
  67.         if(!empty ($this->routes)){
  68.             echo "entro<br/>";
  69.             $this->parseRoutes();
  70.         }
  71.         echo "uri: $uri<br/>";
  72.         echo "this->uri: ".$this->uri."<br/>";
  73.         if(strpos($this->uri,'index.php?') || strpos($_SERVER['REQUEST_URI'],'index.php?') !== FALSE  || !empty($_GET['controlador']) || !empty($_POST['controlador'])) {
  74.             if(isset ($_REQUEST['controlador'])){
  75.                 $controller = $_REQUEST['controlador'];
  76.             }
  77.             elseif(isset ($_POST['controlador'])){
  78.                 $controller = $_POST['controlador'];
  79.             }
  80.             else{
  81.                 $controller = $_GET['controlador'];
  82.             }
  83.             if(isset ($_REQUEST['accion'])){
  84.                 $action = $_REQUEST['accion'];
  85.             }
  86.             elseif(isset ($_POST['accion'])){
  87.                 $action = $_POST['accion'];
  88.             }
  89.             else{
  90.                 $action = $_GET['accion'];
  91.             }
  92.         }
  93.         else {
  94.             $partes = explode('/', $this->uri);
  95.             $apps = $config->get('subapp');
  96.             for($i=0;$i<count($partes);$i++) {
  97.                 if($partes[$i]!='' && !in_array($partes[$i],$apps )) {
  98.                     $segmentos[] = $partes[$i];
  99.                 }
  100.                 else {
  101.                     $app = $partes[$i];
  102.                 }
  103.             }
  104.             if($this->uri!='/') {
  105.                 $seg = explode('/',$this->uri);
  106.                 if($seg[0]!='admin') {
  107.                     $url->removeUrlSuffix();
  108.                     $controller = str_replace(".".$config->get('prefijo'),'',$seg[0]);
  109.                     if(isset($seg[1])) {
  110.                         $action = str_replace(".".$config->get('prefijo'),'',$seg[1]);
  111.                     }
  112.                 }
  113.                 else {
  114.                     $url->removeUrlSuffix();
  115.                     $path = $this->ruta.'admin'
  116.                     $controller = str_replace($config->get('prefijo'),'',$seg[1]);
  117.                     if(isset($seg[2])) {
  118.                         $action = str_replace(".".$config->get('prefijo'),'',$seg[2]);
  119.                     }
  120.                 }
  121.             }
  122.             else {
  123.                 $url->removeUrlSuffix();
  124.                 if($segmentos[1]!='admin') {
  125.                     $controller = str_replace(".".$config->get('prefijo'),'',$segmentos[1]);
  126.                 }
  127.                 if(isset($partes[2])) {
  128.                     $action = str_replace(".".$config->get('prefijo'),'',$segmentos[2]);
  129.                 }
  130.             }
  131.         }
  132.  
  133.         if( empty($controller) ) {
  134.             $controller = $this->controlador_default.'Controller';
  135.         }
  136.         else {
  137.             $controller = $controller.'Controller';
  138.         }
  139.         echo $controller."<br/>";
  140.  
  141.         $nombre = explode('Controller',$controller);
  142.  
  143.         if( empty($action) ) {
  144.             $action = $this->accion_default;
  145.         }
  146.         else {
  147.             $action = $action ;
  148.         }
  149.         echo "accion: $action<br/>";
  150.  
  151.         $config->set('path',$path);
  152.         $config->set('path_root',str_replace('\\', '/', PATH_ROOT).'/');
  153.  
  154.         $controllerLocation =  $config->get('path') . '/controladores/' . $nombre[0] . '/'.$controller.'.php';
  155.         echo "ruta controlador final: $controllerLocation<br/>";
  156.  
  157.         $vista = $config->get('path') . '/controladores/' . $nombre[0] . '/templates/';
  158.         $config->set('vista',$vista);
  159. echo "vista: $vista<br/>";
  160.  
  161.         session_start();
  162.  
  163.         //valido si existe el archivo sino ejecuta la excepcion
  164.         if( file_exists( $controllerLocation )) {
  165.             include_once( $controllerLocation );
  166.         } else {
  167.             error_log("[".date("F j, Y, G:i")."] [Error: E_USER_NOTICE] [Descripcion: No se encuentra el controlador: {$controllerLocation} ]\n", 3,$config->get('root').'/errores.log');
  168.             $_SESSION['error'] .= "<p>No se encuentra el controlador: {$controllerLocation}</p>";
  169.             header("Location:error404");
  170.         }
  171.  
  172.         //valido si existe la clase sino ejecuta la excepcion
  173.         if( class_exists( $controller, false )) {
  174.             $cont = new $controller();
  175.         } else {
  176.             error_log("[".date("F j, Y, G:i")."] [Error: E_USER_NOTICE] [Descripcion: No se encuentra la clase en el controlador $controller en $controllerLocation ]\n", 3,$config->get('root').'/errores.log');
  177.             $_SESSION['error'] .= "<p>No se encuentra la clase en el controlador $controller en $controllerLocation</p>";
  178.             header("Location:error404");
  179.         }
  180.  
  181.         //valido si existe el método sino ejecuta la excepcion
  182.         if( method_exists( $cont, $action )) {
  183.             $cont->$action();
  184.         } else {
  185.             echo "error: ".$action."<br/>";
  186.             //exit();
  187.             error_log("[".date("F j, Y, G:i")."] [Error: E_USER_NOTICE] [Descripcion: La Acción $action no existe $action en la clase $controller en $controllerLocation ]\n", 3,$config->get('root').'/errores.log');
  188.             $_SESSION['error'] .= "<p>La Acción $action no existe $action en la clase $controller en $controllerLocation</p>";
  189.             header("Location:error404");
  190.         }
  191.  
  192.  
  193.  
  194.     }
  195.  
  196.     private function parseRoutes() {
  197.         //creo una instancia de la clase url
  198.         $url = Url::singleton();
  199.         //valido si la url es distinta a /
  200.         if($this->uri != '/') {
  201.             echo "1<br/>";
  202.             //valido si la url es literal
  203.             if (isset($this->routes[$this->uri])) {
  204.                 echo "2<br/>";
  205.                 $this->uri = $this->routes[$this->uri];
  206.                 return $this->uri;
  207.             }
  208.             // recorro el arreglo de reglas router
  209.             foreach ($this->routes as $key => $val) {
  210.                 echo "key: $key - val: $val uri: $uri<br/>";
  211.                 // Convierto los wild-cards a RegEx
  212.                 $key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key));
  213.                 // Valido si existe coincidencia
  214.                 if (preg_match('#^'.$key.'$#', $this->uri)) {
  215.                     echo "3<br/>";
  216.                     // Valido si hay concidencia con las back-reference?
  217.                     if (strpos($val, '$') !== FALSE AND strpos($key, '(') !== FALSE) {
  218.                         $val = preg_replace('#^'.$key.'$#', $val, $this->uri);
  219.                     }
  220.                     $this->uri = $val;
  221.                     return $this->uri;
  222.  
  223.                 }
  224.                 //valido si la regla esta dentro de la url
  225.                 elseif(strpos($this->uri, $key)!== FALSE) {
  226.                     $this->uri = $val;
  227.                     return $this->uri;
  228.                 }
  229.  
  230.             }
  231.             $this->uri = implode('/', $url->segments);
  232.         }
  233.     }
  234.  
  235. ?>

los "echos" que puse para ver que me devolvía cada variable me imprime esto:
Cita:
la
routes

Array
(
)

uri Server : /pbycortos/admin/index.php

Array
(
)

uri: /
explodesegment

Array
(
)

uri:
this->uri: /
indexController
accion: index
ruta controlador final: C:/xampp/htdocs/pbycortos/admin/controladores/index/indexController.php
vista: C:/xampp/htdocs/pbycortos/admin/controladores/index/templates/
si alguien puede encontrar una explicacion porque no anda bien estaré muy agradecido.