Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/12/2010, 16:10
Avatar de mayid
mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Duda Controladores MVC

Cita:
http://host/grupos/{id_grupo}/eventos/{id_evento}
Por qué pasarías primero el id y luego la funcion? Esto funcionaría mucho mejor!

Código PHP:
Ver original
  1. http://host/grupos/eventos/{id_grupo}/{id_evento}

La razón es que las dos primeras variables corresponden a controlador y accion. Es decir, cada controlador tiene muchas acciones. Vos en tu ejemplo solo estabas contemplando que "http://host/grupos/{id_grupo} y la petición la gestiona GruposController.class.php". Pero lo ideal es que primero definas algunas reglas logicas para que funcione bien.

A ver, en limpio (si puedo):
- cada controlador puede tener un metodo index que va a ser el que se ejecute por defecto. Ese puede ejecutarse en caso de que en vez de convocar a otro metodo pases directamente un numero (un parametro numerico).
- cada controlador puede llamar a cualquiera de sus metodos y pasarle dos o mas variables, siempre y cuando la accion se declare en la url.

Te paso un ejemplo de un FrontController que estoy usando yo, y que me funciona para proyectos de pequeña escala (sin usar objetos):

Código PHP:
Ver original
  1.  
  2. include "config.php";
  3. include COMMONS."app/controladores/controlador.php"; // controlador que incluye funciones utiles
  4.  
  5.  
  6. /* Ruteo de variables GET */
  7.  
  8. if ( isset($_GET['route']) )
  9. {                  
  10.     $urlVars = explode('/', preg_replace('/\/$/', "", $_GET['route']));
  11.            
  12.     $controlador  = (isset($urlVars[0])) ? $urlVars[0] : null;
  13.     $accion       = (isset($urlVars[1])) ? $urlVars[1] : null;
  14.     $param1        = (isset($urlVars[2])) ? $urlVars[2] : null;
  15.     $param2        = (isset($urlVars[3])) ? $urlVars[3] : null;
  16.     $param3        = (isset($urlVars[4])) ? $urlVars[4] : null;
  17.        
  18.     if(is_file(NOVEDADES."app/controladores/controlador_".$controlador.".php"))
  19.         require "controladores/controlador_".$controlador.".php";
  20.     else
  21.         require "controladores/controlador_errores.php";
  22.        
  23.     if (function_exists($accion))
  24.             eval($accion($param1, $param2, $param3));
  25.         else
  26.             index();
  27. }  
  28.    
  29. else
  30. {
  31.      require "controladores/controlador_articulos.php"; // controlador default
  32.                index(); // funcion default
  33. }