Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07/12/2009, 12:20
Avatar de destor77
destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años, 2 meses
Puntos: 43
Respuesta: FrontController

Hola GatorV,
empezando a toquetar e hice esto:
Código php:
Ver original
  1. class FrontController
  2. {
  3.     static function main()
  4.     {
  5.         /**
  6.          *  funcion para cargar todas las clases del core
  7.          */
  8.                
  9.         function recursiveInclude($path) {            
  10.             $dir    = scandir($path);              
  11.             if ( (is_array($dir)) && (count($dir) > 0) )              
  12.                 foreach($dir as $k => $v)                                    
  13.                     if ( !(is_dir($path.$v)) && ( file_exists($path.$v) ) && ($v != ".")  && ($v != "..") && (strtolower(end(explode(".", $v))) == 'php') )                                
  14.                         include_once($path.$v);
  15.                     elseif ( is_dir($path.$v) && ($v != ".") && ($v != "..") && ($v != 'smarty') )
  16.                         recursiveInclude($path.$v."/");
  17.            
  18.         }
  19.        
  20.         $ubicacion=explode('/',$_SERVER['PHP_SELF']);
  21.         //Incluimos todas las  clases:
  22.         if($ubicacion[2]=="admin"){
  23.             include_once '../core/clases/class.config.php';            
  24.             recursiveInclude('../core/clases/');
  25.         }
  26.         else{
  27.             include_once 'class.config.php';       
  28.             recursiveInclude('core/clases/');
  29.         }
  30.        
  31.      
  32.        
  33.         if($ubicacion[2]=='admin'){
  34.             require '../configuracion.php'; //Archivo con configuraciones.
  35.         }
  36.         else{
  37.             require 'configuracion.php';//Archivo con configuraciones.
  38.         }
  39.        
  40.         //Con el objetivo de no repetir nombre de clases, nuestros controladores
  41.         //terminaran todos en Controller. Por ej, la clase controladora Items, será ItemsController
  42.  
  43.         //Formamos el nombre del Controlador o en su defecto, tomamos que es el IndexController
  44.         if(! empty($_REQUEST['controlador'])){
  45.               $controllerName = $_REQUEST['controlador'].'Controller';
  46.               $controllerFolder = $_REQUEST['controlador'];
  47.         }
  48.         else{
  49.               $controllerName = "indexController";
  50.               $controllerFolder = 'index';
  51.         }
  52.  
  53.         //Lo mismo sucede con las acciones, si no hay accion, tomamos index como accion
  54.         if(! empty($_REQUEST['accion']))
  55.               $actionName = $_REQUEST['accion'];
  56.         else
  57.               $actionName = "index";
  58.  
  59.         //verifico si esta en el admin o no
  60.         if(!isset($_SESSION['admin'])&&$ubicacion[2]!='admin'){
  61.             $controllerPath = $config->get('controllersFolder') . $controllerFolder . '/'.$controllerName.'.php';
  62.             $config->set('viewsFolder',$config->get('controllersFolder') . $controllerFolder . '/templates/');
  63.             $templates=$config->get('adminControllerFolder') . $controllerFolder . '/templates/';
  64.             $config->set('viewsFolders',$templates);
  65.             //$error404 = $config->get('controllersFolder').'error404/error404Controller.php';
  66.            
  67.         }
  68.         else{
  69.             $controllerPath = $config->get('adminControllerFolder') . $controllerFolder . '/'.$controllerName.'.php';
  70.             $templates=$config->get('adminControllerFolder') . $controllerFolder . '/templates/';
  71.             $config->set('viewsFolders',$templates);
  72.             $config->set('templates',$config->get('adminViewsFolder'));
  73.             $error404 = $config->get('adminControllerFolder').'error404/error404Controller.php';
  74.         }
  75.  
  76.         //Incluimos el fichero que contiene nuestra clase controladora solicitada
  77.         if(is_file($controllerPath))
  78.               require $controllerPath;
  79.         else
  80.               die('El controlador no existe - 404 not found<br/>'.$controllerPath);
  81.               //require $error404;
  82.               //echo $error404;
  83.  
  84.         //Si no existe la clase que buscamos y su acción, tiramos un error 404
  85.        
  86.        
  87.         if (is_callable(array($controllerName, $actionName)) == false)
  88.         {
  89.             trigger_error ($controllerName . '->' . $actionName . ' no existe', E_USER_NOTICE);
  90.             return false;
  91.         }
  92.         //Si todo esta bien, creamos una instancia del controlador y llamamos a la accion
  93.         $controller = new $controllerName();
  94.         $controller->$actionName();
  95.     }
  96.    
  97.    
  98. }

pero cuando quiero entrar a elstitio/admin/
me salta el error:
El controlador no existe - 404 not found

y si imprimo la ruta del controlador sale:
admin/controladores/index/indexController.php

y el indexController tiene esto:
Código php:
Ver original
  1. class indexController extends Controller {
  2.     public function index(){
  3.         $hola="Hola mundo";
  4.         echo $hola;
  5.     }
  6. }

estoy armando mal el frontcontroller?, como sería eso del router?