Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Mvc

Estas en el tema de Mvc en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Me gustaria saber si esto me pudiera servir como una implementacion del MVC modelo.php Código PHP: <?php class  Estudiantes     {     private  $nombre ;     private  $apellidos ...
  #1 (permalink)  
Antiguo 01/06/2007, 18:37
Avatar de dmartinezn  
Fecha de Ingreso: enero-2006
Mensajes: 74
Antigüedad: 18 años, 3 meses
Puntos: 1
Mvc

Me gustaria saber si esto me pudiera servir como una implementacion del MVC

modelo.php
Código PHP:
<?php
class Estudiantes    {
    private 
$nombre;
    private 
$apellidos;
    
    public function 
__construct()    {
        
    }
    public function 
setNombre$nombre ) {
        
$this->nombre $nombre;                
    }
    
    public function 
setApellidos$apellidos ) {
        
$this->apellidos $apellidos;
    }
    
    public function 
getNombre()    {
        return 
$this->nombre;
    }
    
    public function 
getApellidos()    {
        return 
$this->apellidos;
    }
    
    public function 
insertar_estudiantes () {
        
//Consulta de inserción a la BD        
        
$nombre    $this->nombre;
        
$apellidos $this->apellidos;
        
$sql ="insert into estudiantes ( nombre , apellidos) values    ( '$nombre' , '$apellidos' )";
        
$query $dbh->query $sql );
        
    }
    
    public function 
eliminar_estudiantes ()    {
        
        
    }
controlador.php
Código PHP:
<?php
        
include_once("estudiantes.php");  
        
$nombre $_POST['nombre'];
        
$apellidos $_POST['apellidos'];
        
$error = array();
        if ( empty(    
$nombre) ) {
            
$error['nombre'] = "Debe de escribir un nombre";
        }        
        if ( empty(    
$apellidos ) )    {
            
$error['apellidos'] = "Debe de escribir los apellidos";
        }
        
        
$noError = ( count$error ) > false true );
        
$estudiantes = new Estudiantes(); 
        
$estudiantes->setNombre$nombre );
        
$estudiantes->setApellidos(    $apellidos    );        
        
$estudiantes->insertar_estudiantes();    
?>
Saludos
  #2 (permalink)  
Antiguo 01/06/2007, 18:51
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Re: Mvc

el controlador y la vista?
  #3 (permalink)  
Antiguo 01/06/2007, 19:06
Avatar de dmartinezn  
Fecha de Ingreso: enero-2006
Mensajes: 74
Antigüedad: 18 años, 3 meses
Puntos: 1
Re: Mvc

La vista no la puse pues pense que no era necesario poner todo el codigo HTML.
De todas formas me gustaria saber si esto esta correcto!?
  #4 (permalink)  
Antiguo 01/06/2007, 20:00
Avatar de dmartinezn  
Fecha de Ingreso: enero-2006
Mensajes: 74
Antigüedad: 18 años, 3 meses
Puntos: 1
Re: Mvc

Disculpen olvide poner el controlador, el que puse arriba no es !.
controlador.php
Código PHP:
include_once("estudiantes.php"); 
class 
gestionarEstudiantes {
    function 
__construct()    {
        
    }
    
    function 
nuevo_usuario (  $nombre $apellidos ) {
        
$estudiantes = new Estudiantes();                                 
            
$error = array();
            if ( empty(    
$nombre) ) {
                
$error['nombre'] = "Debe de escribir un nombre";
            }        
            if ( empty(    
$apellidos ) )    {
                
$error['apellidos'] = "Debe de escribir los apellidos";
            }
            
            
$noError = ( count$error ) > false true );
            
$estudiantes->setNombre$nombre );
            
$estudiantes->setApellidos(    $apellidos    );        
            
$estudiantes->insertar_estudiantes();        
        
    }    
    
    

}
$nombre $_POST['nombre'];
$apellidos =$_POST['apellidos'];
$gestionarEstudiantes = new gestionarEstudiantes();
$gestionarEstudiantes->nuevo_usuario$nombre $apellidos ); 
  #5 (permalink)  
Antiguo 02/06/2007, 08:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Mvc

Si, estas implementando el patrón, aunque en tu método insertar_estudiantes no veo de donde sale el objeto $dbh, de ahí en fuera me gusta tu implementación, asegurate de separar bien las capas y que tu modelo de estudiantes te traiga objetos del tipo estudiante.

Saludos.
  #6 (permalink)  
Antiguo 02/06/2007, 12:52
Avatar de dmartinezn  
Fecha de Ingreso: enero-2006
Mensajes: 74
Antigüedad: 18 años, 3 meses
Puntos: 1
Re: Mvc

Si puedes me gustaria que fueras un poco mas explicito en cuanto a:
"asegurate de separar bien las capas y que tu modelo de estudiantes te traiga objetos del tipo estudiante".
Acaso tengo que tener una clase estudiante con los atributos, los get y los set y otra estudiantes donde estaria la implementacion de los metodos de esa clase?
Saludos.
  #7 (permalink)  
Antiguo 02/06/2007, 13:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Mvc

No necesariamente, pero tu capa de modelo te tiene que regresar objetos, no arreglos, o datos simples, asi separas la logica entre tu modelo y lo que regresa, asi no importa que guardes en SQL, XML, TXT, etc. siempre te va a regresar el valor que necesitas.

Saludos.
  #8 (permalink)  
Antiguo 02/06/2007, 13:53
Avatar de dmartinezn  
Fecha de Ingreso: enero-2006
Mensajes: 74
Antigüedad: 18 años, 3 meses
Puntos: 1
Re: Mvc

Prodría poner un ejemplo sencillo sobre lo anteriormente planteado?
  #9 (permalink)  
Antiguo 02/06/2007, 14:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Mvc

http://web2development.blogspot.com/
  #10 (permalink)  
Antiguo 05/06/2007, 08:04
Avatar de dmartinezn  
Fecha de Ingreso: enero-2006
Mensajes: 74
Antigüedad: 18 años, 3 meses
Puntos: 1
Re: Mvc

Me sirvió de mucho lo que me indicaste , pero me ha surgido una duda!
Normalmente en IS se plantea que es recomendable que cada caso de uso tenga una clase controladora..
Si yo tengo un caso de uso, ejemplo: gestionar estudiantes en el cual tengo 3 secciones(insertar_estudiantes,modificar_estudiant es,eliminar_estudiantes),de la forma que presente el ejemplo no me serviría, pues no tendría forma de especificarle el metodo a la controladora que quiero que se ejecute cuando envío los datos, ya que mi clase controlara tendría varios métodos (insertar_estudiantes,modificar_estudiantes,elimin ar_estudiantes).
Una posible solución que me dieron fue que podría tener las instancias de los métodos de la clase controladora en la vista y no en la controladora como hice anteriormente:
vista.php
Código PHP:
include("controlador.php");
$nombre $_POST['nombre'];
$apellidos =$_POST['apellidos'];
$gestionarEstudiantes = new gestionarEstudiantes();
$gestionarEstudiantes->nuevo_usuario$nombre $apellidos ); 
y que al realizar el submit del formulario, se enviarían los datos hacia esa mima pagina (vista), los recogeria con el $_POST[] y se comunicaría con la controladora ejecutando el metodo.
Pero no creo que esta sea la forma optima de realizar esto!!
De que forma podría solucionar esto?.
  #11 (permalink)  
Antiguo 05/06/2007, 08:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Mvc

1.- NO, la vista no tiene porque comunicarse de esa forma con el controlador, es el controlador el que decide que se imprima e inicie la vista, no al revez.
2.- El controlador es el que se debe de encargar de esas decisiones, es decir a lo mejor en tu formulario envias un campo oculto que diga la accion a realizar y en base a eso llamas a tu funcion en tu controlador.

Lo mejor es hacer un router para que no tengas problemas con tu clase controller, asi via parametros puedes indicarle que controlador y que metodo ejecutar.

Saludos.
  #12 (permalink)  
Antiguo 05/07/2007, 12:00
Avatar de dmartinezn  
Fecha de Ingreso: enero-2006
Mensajes: 74
Antigüedad: 18 años, 3 meses
Puntos: 1
Re: Mvc

He estado buscando informacion hacerca de los router en php y no encuentro nada, me podrias poner un link donde pueda encontrar algo sobre esto? O un pequeño ejemplo donde se muestre su utilizacion

Saludos
  #13 (permalink)  
Antiguo 05/07/2007, 18:06
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Re: Mvc

Código PHP:
class Router {
    
/*........etc...*/
    
public function route() {
        
$path $_SERVER['REQUEST_URI'];
        if (
strstr($path'?')) {
            
$path substr($path0strpos($path'?'));
        }

        
$path explode('/'trim($path'/'));

        
$this->controller $path[0];
        
$this->action     = isset($path[1]) ? $path[1] : null;

        if (!
strlen($controller)) {
           
$this->controller 'index';
           
$this->action 'index';
        }
        
/*........etc...*/
    
}
/*........etc...*/

Tambien los request http los puedes obtener de $_GET.

Código PHP:
        if (!empty($_GET['controller ']))
          {
            
$_GET['controller '];
          } else {
                 
$this->controller  'index';
                 }
        
            
        if (!isset(
$_GET['action']) && !isset($_POST['action'])) 
        {
            
$this->action 'index';
                
        } else if(isset(
$_GET['accion'])) {
            
$this->accion $_GET['accion'];    
        } 

Última edición por zsamer; 05/07/2007 a las 18:12
  #14 (permalink)  
Antiguo 05/07/2007, 19:09
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 17 años, 4 meses
Puntos: 3
Re: Mvc

Podrian explicar algo mejor eso de los router, por favor???


Saludos
  #15 (permalink)  
Antiguo 05/07/2007, 19:26
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Re: Mvc

El Router es un objeto que permite al objeto Dispatcher(despachador) saber que controller (clase controladora) y que action (método action de la clase controladora) ejecutar.

ej:
Código PHP:
class Dispatcher{
/*...etc...*/
    
public function dispatch(Router $router) {
/*...etc...*/
        
if (file_exists$this->_path_class )) 
        {
            include( 
$this->_path_class );
            
            
$className  $router->getControllerName();
            
$actionName $router->getActionName();
    
            
$run = new $className();
            
$run->$actionName();
            
        } else {        
            throw new 
Exception("El archivo no Existe..." $this->_path_class);
        }
   }


Última edición por zsamer; 05/07/2007 a las 19:41
  #16 (permalink)  
Antiguo 20/10/2007, 12:18
Avatar de Seixas  
Fecha de Ingreso: mayo-2004
Ubicación: Barcelona
Mensajes: 60
Antigüedad: 20 años
Puntos: 0
Re: Mvc

En el siguiente enlace hay un ejemplo muy bueno de un sistema MVC con router:

Building a simple MVC system with PHP5

Sé que el tema lleva ya tiempo parado pero a quién lo encuentre por el buscador le puede servir de ayuda el enlace.

Última edición por Seixas; 20/10/2007 a las 12:29
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:27.