Foros del Web » Programando para Internet » PHP »

estructura de sitio web usando MVC en PHP

Estas en el tema de estructura de sitio web usando MVC en PHP en el foro de PHP en Foros del Web. Hola a todos: La cuestión es la siguiente. Desde hace tiempo vengo programando distintos sitios web en PHP sobre bases de datos en MySQL. También ...
  #1 (permalink)  
Antiguo 16/01/2009, 17:11
 
Fecha de Ingreso: junio-2006
Mensajes: 125
Antigüedad: 17 años, 10 meses
Puntos: 1
estructura de sitio web usando MVC en PHP

Hola a todos:

La cuestión es la siguiente. Desde hace tiempo vengo programando distintos sitios web en PHP sobre bases de datos en MySQL. También programo cosillas con JavaScript y con Ajax y uso CSS y demás cosillas típicas como todos vosotros.
El caso es que veo que mi forma de programar se ha quedado obsoleta, ya que yo suelo programar las cosas creando archivos que incluyen functions que luego yo incluyo(include) en algunas páginas desde las que voy a llamar a esas funciones en determinados momentos. Muchas de esas funciones crean código HTML por medio de echos con PHP. Algo que está completamente obsoleto y me doy cuenta de que es un error y un coñazo tener que hacer así las páginas.
El caso es que voy a intentar programar mis sitio siguiendo el patrón MVC sin usar ningun frameWork específico, sino creando las cosas que yo quiera y que yo necesite con mi propio código.
Mi mayor problema que me está surgiendo en relación a este aspecto es el cómo tengo que tener estructurado el sitio, es decir, yo antes mi sitio quedaba de esta forma, distribuido en diferentes carpetas, por ejemplo:

nombre_De_mi_sitio:
////carpeta_imagenes (las imágenes de la web) :?
////carpeta includes (donde meto las funciones) (y esta carpeta está dividida en):
//javascript (donde meto los archivos de funciones de javascript que luego incluyo en las páginas)
// CSS (los estilos de las páginas que incluyo en las páginas también)
//func_logicas (donde se encuentran aquí los archivos con las distintas funciones, por ejemplo:
-archivo_func_noticias.php
- archivo_func_registro_usuarios.php
- etc....

Mi pregunta es cómo se estrucutra un sitio web basado en el modelo MVC.

Espero que me hayan comprendido...
Un saludo.
  #2 (permalink)  
Antiguo 16/01/2009, 17:45
Avatar de srsombrero  
Fecha de Ingreso: marzo-2008
Mensajes: 128
Antigüedad: 16 años
Puntos: 0
Respuesta: estructura de sitio web usando MVC en PHP

Yo creo que deberias aprender de los grandes....
Antes de crearte un MVC, deberias leerte algun manual de un framework que utilize este patron.
Por ejemplo CakePHP tiene una linda estructura de directorios, podrias copiarla.
Symfony tiene una hermosa explicacion de como hacer con funciones y sin clases extraccion de datos de una base utilizando este patron... es decir hay que leer un poco nada mas.

Saludos.
  #3 (permalink)  
Antiguo 16/01/2009, 18:46
 
Fecha de Ingreso: junio-2006
Mensajes: 125
Antigüedad: 17 años, 10 meses
Puntos: 1
Respuesta: estructura de sitio web usando MVC en PHP

He encontrado esto en NetTuts.com enseñan en una serie de tutoriales como hacer tu propio framework MVC desde 0, ya van publicando 3 tutoriales, porque es en partes, asi que visita la pagina seguido o suscribete al RSS para que sepas cuando publican el resto

PHP5 Framework Part 1

PHP5 Framework Part 2

PHP5 Framework Part 3
  #4 (permalink)  
Antiguo 16/01/2009, 19:08
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: estructura de sitio web usando MVC en PHP

Hay un sub-foro de PHP orientado a objetos ;)
__________________
Salu2!
  #5 (permalink)  
Antiguo 16/01/2009, 22:55
Avatar de javico40  
Fecha de Ingreso: agosto-2008
Ubicación: Evergreen Terrace 123
Mensajes: 288
Antigüedad: 15 años, 8 meses
Puntos: 9
De acuerdo Respuesta: estructura de sitio web usando MVC en PHP

Hola acholaco feliz dia, me parece excellente que hayas desidido implemetar el Modelo Vista Controlador, estoy realizando el curso de IBM Advanced Carreer y eso es lo nuevo en programacion web, primero debes pasar a la programacion orientada a objetos de php, en internet hay muchos tutoriales, este estilo de programacion es mucho mas limpia que la programacion estructurada y muy poderosa, es mucho mas facil rastrear los errores, para mi es lo mejor.
Volviendo al tema de modelo vista controlador, recuerda lo fundamental: el modelo vista controlador se basa en la implementacion de tres estructuras, el modelo, la vista y los escuchadores o controladores, en base a esto estructura tus proyectos, las vistas pueden ser los templates que uses para tus proyectos, busca en san google, uso de templas en php, o diseños html propios que tengas, los controladores o escuchadores seran quienes procesen los eventos generados por el usuario, es decir, ellos simplementa enviaran request y submit, cuando un usuario genera una accion en un formulario, pon el action del form en tu controlador, el detectara que se ha realizado una accion, y enviara a el modelo la peticion requerida, por ejemplo:

<form action: controller.php method: post>

controller.php dara acceso a la clase index.php a el modelo.

el modelo es la clase que define la estructura de los objetos, en ella definimos las carateristicas y atributos de nuestros objetos, de manera que tenemos en nuestro modelo definido que se puede hacer con ellos, por ejemplo tenemos la clase persona, define la persona, el controlador trabajar y la vista oficina.

persona define los atributos de la una persona:

tiene manos, cabello, sexo, edad, etc.

trabajar recibe acciones que la persona debe hacer en su oficio.

hacer cafe, leer informe, etc.

y oficina es lo que ve quien maneja la persona (gerente) en nuestro caso el usuario:

usuario hace click en hacer cafe -> esto envia un mensaje a trabajar, pidiendo a persona que use sus atributos, manos y pies, para que realice la accion pedida. modelo (persona) devuelve que el cafe esta listo, controlador toma el mensaje y lo reenvie a oficina diciendo que la persona ya hizo el cafe, espero que te haya quedado claro.
  #6 (permalink)  
Antiguo 16/01/2009, 23:03
Avatar de javico40  
Fecha de Ingreso: agosto-2008
Ubicación: Evergreen Terrace 123
Mensajes: 288
Antigüedad: 15 años, 8 meses
Puntos: 9
Respuesta: estructura de sitio web usando MVC en PHP

te recomiendo ver la siguiente pagina: http://www.openpopuli.com/ , baja el codigo y aprenderas como hacer un framework basado en php orientado a objetos.
  #7 (permalink)  
Antiguo 17/01/2009, 05:53
 
Fecha de Ingreso: junio-2006
Mensajes: 125
Antigüedad: 17 años, 10 meses
Puntos: 1
Respuesta: estructura de sitio web usando MVC en PHP

hola javico:
muchas gracias por tus mensajes, son bastantes didácticos.

Mi problema está en que estoy un poco atascado en cómo empezar, sobre todo en la forma en la que tengo que estructurar el sitio.
Yo lo que me pasa es que no veo mucha diferencia entre la forma en que lo hago ahora (archivos en php que contienen funciones y que luego esos archivos se incluiran en las paginas desde las que se llamara a esas funciones) con la forma de trabajar con clases. Ya que por lo que veo hay que estar tambien continuamente haciendo includes. tal y como me sucede ahora.

Con respecto a esto que dijiste:

<form action: controller.php method: post>

controller.php dara acceso a la clase index.php a el modelo.


No lo entiendo, pordrías esplicarmelo por favor? Grcias.

La cuestión está en que me gustaría poder encontrar en Internet algunos ejemplo básicos de cómo se procesa por ejemplo siguiendo el patrón MVC un formulario con datos para insertarlos en la base de datos y responder al usuario con un aviso de error o éxito en una determinada página.

Yo normalmente cuando he creado funciones que consultaban y recuperaban datos de una BD, estos datos recuperados en la función los he ido poniendo en la página por medio de echos que incluían un montón de HTML. A estas funciones, claro está yo las llamaba desde una página habiendolas inlcluído antes por medio de un include(). Esto es lo que quiero evitar, pero la verdad es que lo que me irrita y no sé por dónde coger es cómo debería estructurar esto siguiendo el patrón MVC con el uso de objetos-clases.
Es decir, al hacer click en un enlace el usuario en una página que ponga "ver las noticias", no sé a dónde tiene que ir dirigido ese enlace y una vez que lo dirija a un sitio, no sé cómo estructurarlo para recuperar los datos por medio de objetos- clases y luego mostrarlo todo utilizando una plantilla (Smarty).

Espero me hayan entendido y sobre todo tú, Javi jejeje

Un saludo y gracias y espero que entre todos nos vayamos ayudando a insertar en nuestras vidas de programación en PHP el patrón MVC (como os envidio a los que creais así aplicaciones web propias sin usar ningún Framework)
  #8 (permalink)  
Antiguo 17/01/2009, 11:28
Avatar de javico40  
Fecha de Ingreso: agosto-2008
Ubicación: Evergreen Terrace 123
Mensajes: 288
Antigüedad: 15 años, 8 meses
Puntos: 9
Sonrisa Respuesta: estructura de sitio web usando MVC en PHP

Hola acholaco, pues la estructuracion es la que te dije, te dare un ejemplo con la que uso yo, para mis folders uso el nombre del sistema + la palabra componente + mas el tipo de componente:

-> Sys.com.vista
-> Sys.com.controller
-> Sys.com.model

la palabra componente la uso porque se refiere a que esa parte del sistema pertenece al nucleo de la aplicacion.
tambien añado ciertos folders como :

-> Sys.libs
-> Sys.include

Sys.libs es para libreria desarrolladas por otros usadas por tu sistema, como curvicorners o otra libreria que utilices, en include habran archivos que obligatoriamente es nesesario incluir en tu main, ejemplo: confi.php.
Con el uso de clases yo solo incluyo un archivo a todo el sistema, main.php, que esta en el root del sistema:

root -> main.php ->Sys.com.vista
->Sys.com.cotroller
->Sys.com.model
->Sys.libs
->Sys.include

El poder de usar la programacion orientada a objetos radica en conocer lo que ella te permite hacer, como la abstraccion, la sobrecarga, la reescritura, la herencia, la serializacion, y muchas otras cosas que hacemos con orientado a objetos.
BREVE EXPLICACION SOBRE POO

hay mucha diferencia en trabajar con funciones, te explicare rapidamente algunos conceptos para que veas su poder, digamos que estamos haciendo un sistema para un zoologico, todos los animales comen?, si pero de diferente manera, y diferente comida, entonces tenemos que todos los animales comen, en base a esto definimos una clase abstracta, esta clase no podra ser instanciada, es decir no podremos crear objetos animal, pero si podremos heredar de ella su comportamiento:

Código:
<?
abstract Class Animales {

 // atributo

private $comida; 

// metodo abstracto lo debes llamar por herencia
// los metodos abstractos no tiene cuerpo {} solo son definiciones 

public abstract function nombre_metodo(); 

}
?>
la clase animales define un comportamiento, a los metodos los llamamos comportamientos no funciones asi usen la palabra reservada function, pues demarcan como se comporta la clase mediante mensajes, ahora digamos que debemos alimentar las aguilas, el codigo seria el siguiente:

Código:
<?
// esta clase debe implementar todos los metodos de la clase abstracta 
Class Aguila extends Animales{

// ahora puedes definir como deben comer para aguilas

public abstract function nombre_metodo(){
tu codigo aqui
} 
}
?>
ahora tenemos la clase leon

Código:
<?
Class Leon extends Animales{

// ahora puedes definir como deben comer los leones

public abstract function nombre_metodo(){
tu codigo aqui
}
}

?>
las clases abstractas nos permiten definir comportamientos comunes a varias clases, de esta manera podemos usar el encapsulamiento, escondiendo mucho de nuestro codigo y aumentando el nivel de seguridad del sistema, muy distinto a si definieramos en cada archivo las funciones comer claseficadas de manera desordenada, saber que afecta que, seria mas dificil saber que afecta que al momento de un error, esto en grandes sistemas es fatal.
Digamos que aguilas define un comportamiento adicional llamado volar.

Código:
<?PHP

// esta clase debe implementar todos los metodos de la clase abstracta 
Class Aguila extends Animales{

// ahora puedes definir como deben comer para aguilas
// metodo heredado de la clase abstracta
public  function nombre_metodo(){
tu codigo aqui

public function volar(){
echo "volando";
}

?>
ahora una clase aguila calva que hereda de aguila, pero esta aguila calva es silvestre y vuela solamente, como aguila calva hereda de una clase no abstracta ella puede desidir que implementar

Código:
<?PHP
Class Aguila_ Calva extends Aguila{

/*este metodo tiene el mismo nombre, sin embargo añade una nueva funcionalidad y recibe un parametro adicional, estamos frente al polimorfismo, un metodo del mismo nombre pero mas especializado, la POO permite reutilizar el codigo, algo que no es facil con la estructurada, uno de los princiops de la POO es la reutilizacion del codigo.
*/

public function volar($direccion){
echo "volando a ". $direccion;
}

}

?>
Solo son dos ejemplso pequeños de lo que puedes hacer, programar en POO te dara una herramienta poderosa de diseño de software, la mayoria del sofwtare profesional esta diseñado en POO porque este permite reutilizar el codigo, encontrar errores facilmente, y definir nuestro sistema de manera mas clara.

Como te dije antes gracias a los conceptos de herencia, polimorfismo, encapsulamiento, abstraccion, etcetera, yo solo tengo un include en todo mi sistema, main.php, pero uso require no include, algo que he aprendido de reingenieria de sistemas php gnu, trata de buscar tutoriales en ingles y traducelos con la herramienta de traduccion de google (si no sabes ingles), en español encontraras poco sobre esto ya que no mucha gente es experta en el area en especial en php, en java encontraras mucho material.

"Con respecto a esto que dijiste:"

//recuerda que los formularios usando post no nesesariamente se ejecutan en el formulario en el que esta el codigo, podemos usar el paso por parametro a nuestro controlador, digamos que ese formulario esta en index.php, cuando el usuario oprima el boton enviar las acciones de procesamiento se ejecutaran en controller.php, el recibira las variables y las procesara.

<form action: controller.php method: post>
controller.php dara acceso a la clase index.php a el modelo.


// luego el controlador hara el llamado a los metodos que nesesita para validar estos datos

en controller.php

Código:
if($_POST[send]){
$nombre = $_POST[cli_name];

Cliente $cli = new Cliente();
$valide = $cli->validateCli($nombre);
if($valide!=null){
redirecciono a thanks.php
}else{
return $validate;
}
}
el modelo contiene la clase cliente y el metodo de validacion, el reenviara un retorno al controlador afimando si el usuario es valido o ya esta registrado, el recibira esa informacion en $validate y si validate tiene algo la reenviara a la vista la cual usando algo parecido define si hay algo y lo muestra, puedes poner la redireccion tambien en la vista, solo recuerda algo:

Código:
echo "<strong>Palabra en negrta</strong>"; //forma errones
<strong>
<?PHP
echo "Palabra en negrita"; // forma correcta
?>
</strong>
Para lo que quieres hacer para base de datos es ideal hacerlo con POO, en tu modelo puedes definir algo como:

Código:
private conexiones = array();
esto te permitira crear multiples conexiones a base de datos, con el uso de poo vas a ver mucha flexibilidad en tu programacion, espero que te haya sido de ayuda, cualquier duda no dudes en preguntar.
  #9 (permalink)  
Antiguo 17/01/2009, 17:16
 
Fecha de Ingreso: junio-2006
Mensajes: 125
Antigüedad: 17 años, 10 meses
Puntos: 1
Respuesta: estructura de sitio web usando MVC en PHP

millones de gracias por tu explicación javico, ahora leeré mas detenidamente tu respuesta e intentaré empezar a crear algo básico para adentrarme en la POO con PHP.

De todas formas tengo aún muchas dudas, las cuales iré exponiendo más adelante, cuando empiece a trabajar sobre esto.

La verdad es que estoy bloqueadooo!!!
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 18:53.