Foros del Web » Programando para Internet » PHP »

MVC en php

Estas en el tema de MVC en php en el foro de PHP en Foros del Web. Hola..estoy trabajando con el patron MVC en php, y quiero saber cual es la mejor manera de trabajar con esto. tengo entendido lo siguiente: En ...
  #1 (permalink)  
Antiguo 15/04/2009, 08:35
adg
 
Fecha de Ingreso: enero-2009
Mensajes: 60
Antigüedad: 15 años, 2 meses
Puntos: 1
Pregunta MVC en php

Hola..estoy trabajando con el patron MVC en php, y quiero saber cual es la mejor manera de trabajar con esto. tengo entendido lo siguiente:

En el modelo tengo todo lo relacionado con la base de datos..
La vista se encarga solamente de generar html..
y la controladora es el encargado de ser el intermediario entre el modelo y la vista, recibe valores de formularios por POST y GET, llama a los metodos del modelo, llama a la vista correspondiente pudiendole pasar arreglos o variables, gestiona sessiones o cookies, entre otras cosas...

esto es correcto, verdad? en teoria es claro, pero hay que llevarlo a la practica y ahi en cuando mas tengo dudas...

Pregunta: en la controladora como realizo la comprobacion de variables por POST o GET?? estas van dentro de los metodos que realizan acciones o van fuera de estos metodos?? por ejemplo:

controladora:
Cita:
<?php
if(isset($_POST('id')))
{
obtenerNovedad($_POST('id')); //una sola
}
else
{
obtenerNovedades(); //todas
}

include('Dnovedades.php'); //incluye el modelo de las novedades
obtenerNovedad($id)
{
$novedad = getNovedad($id);
include('muestraNovedades.php'); //llama a la vista
}

obtenerNovedades()
{
$novedades = getNovedades();
include('muestraNovedades.php'); //llama a la vista
}
?>
en este ejemplo estoy recibiendo variables por POST fuera de las funciones...
esta forma esta bien? o deben ir dentro de los metodos de la controladora??

les agradeceria se me pueden dar una mano ya que eh investigado y no eh encontrado esto que necesito..

PD: si me escriben algun ejemplo con codigo se los agradeceria mas aun...
gracias..
  #2 (permalink)  
Antiguo 15/04/2009, 15:19
Avatar de deivax  
Fecha de Ingreso: marzo-2006
Mensajes: 31
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: MVC en php

Antes que nada, lo que preguntás sobre el concepto de implementación está bien: El Modelo maneja la base de datos y la lógica de negocio, la Vista maneja la salida de datos (templates, json, xml, etc), y el Controlador llama a sus acciones que interactúan con el modelo y la vista.

Pero quién elige el controlador? quién ejecuta la acción? dónde se decide qué plantilla se va a utilizar? en qué momento es consultada la base de datos?

Aparte de las clases Model, View y Controller, se necesita un bootstrap, una puerta de entrada al sistema por donde se pueda llegar hasta el controlador apropiado.

Por ejemplo el archivo index.php podría contener lo siguiente:
Código PHP:
<?php
//nombres del controlador y la acción
$controller = !empty($_REQUEST['controller']) ? $_REQUEST['controller'] : 'default';
$action = !empty($_REQUEST['action']) ? $_REQUEST['action'] : 'index';

//instancia de la clase controlador
$controller_class $controller.'Controller';
require_once 
$controller_class '.php';
$oController = new $controller_class();
$action $action 'Action';

//ejecutar la acción del controlador correspondiente
$oController->$action();
Hasta acá tenemos dos puntos importantes:
- Modelos, vistas y controladores son CLASES.
- Acciones son métodos públicos específicos de los controladores

DefaultController.php
Código PHP:
class DefaultController
{

  public function 
__construct()
  {
    
//incluir archivo de la clase vista
    
require_once 'View.php';
    
// la instancia de la clase View será una propiedad de la clase controlador para que las acciones puedan manejar la instancia a conveniencia.
    
$this->_oView = new View();
  }

  
/**
   * Método que se ejecutará cuando sea llamado desde el bootstrap
   */
  
public function indexAction()
  {
    
//acá es donde son instanciadas las clases modelo
    
$oModel = new Model();
    
$data $oModel->getData();

    
//copiar datos del modelo en la vista
    
$this->oView->data $data;
    
    
//mostrar el contenido de la plantilla index.tpl en pantalla
    
$this->oView->render('default/index.tpl');
  }

Luego en la vista vas a tener que escribir el código html imprimiendo variables que hayas pasado a la vista en el controlador, y ejecutando bucles o algún if.
Se supone que para el template no se necesita más que eso, porque la lógica estaría ubicada en el modelo y la interacción en el controlador.

Creo que esto te va a ayudar bastante. También podés mirar cómo están armados por ejemplo el Zend Framework o Symfony.
Más allá de lo conceptual, luego te toca ser creativo para satisfacer tus necesidades a la hora de desarrollar una aplicación.
  #3 (permalink)  
Antiguo 16/04/2009, 11:45
adg
 
Fecha de Ingreso: enero-2009
Mensajes: 60
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: MVC en php

gracias por tu aporte, realmente ahora veo que aplicando MVC para aplicaciones web es bastante diferente en algun sentido con las aplicaciones de escritorio.

eso de 'bootstrap' que me comentaste es algo nuevo para mi que voy a tener que seguir investigando..
realmente lo que escribiste me sirve en la forma de pensarlo, ya que en principio quiero desarrollarlo sin objetos, por lo menos hasta que lo entienda bien el manejo de MVC en php

Cita:
Pero quién elige el controlador?
yo pensaba que lo elegía la vista (en donde se generan los eventos de usuarios) a la cual pertenece a un cierto controlador...pero con lo que decis veo que estaba equivocado..

te muestro un ejemplo que encontre
Cita:
//index.php
< ?php
//Primero algunas variables de configuracion
require 'conexion.php';

//La carpeta donde buscaremos los controladores
$carpetaControladores = "controladores/";

//Si no se indica un controlador, este es el controlador que se usará
$controladorPredefinido = "items";

//Si no se indica una accion, esta accion es la que se usará
$accionPredefinida = "listar";

if(! empty($_GET['controlador']))
$controlador = $_GET['controlador'];
else
$controlador = $controladorPredefinido;

if(! empty($_GET['accion']))
$accion = $_GET['accion'];
else
$accion = $accionPredefinida;

//Ya tenemos el controlador y la accion

//Formamos el nombre del fichero que contiene nuestro controlador
$controlador = $carpetaControladores . $controlador . 'Controlador.php';

//Incluimos el controlador o detenemos todo si no existe
if(is_file($controlador))
require_once $controlador;
else
die('El controlador no existe - 404 not found');

//Llamamos la accion o detenemos todo si no existe
if(is_callable($accion))
$accion();
else
die('La accion no existe - 404 not found');
?>
Cita:
//ItemsControlador.php
<?
function listar()
{
//Incluye el modelo que corresponde
require 'modelos/itemsModelo.php';

//Le pide al modelo todos los items
$items = buscarTodosLosItems($db);

//Pasa a la vista toda la información que se desea representar
require 'vistas/listar.php';
}

function agregar()
{
echo 'Aqui incluiremos nuestro formulario para insertar items';

require 'modelos/itemsModelo.php';

if($_POST)
{
insertar();
}

require 'vistas/agregar.php';
}
?>
este es un ejemplo que encontre con la misma forma que me decis pero sin objetoss...trabajar MVC de esta forma (como en este codigo) es apropiado??

todavia no me quiero meter con el temita de los frameworks en php sino que quiero aprender sin ellos por ahora.

tambien quiero llegar a hacerlo en objetos pero cuando aprenda a hacerlo sin ellos...
acepto todo tipo de sugerencias...
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 21:30.