4-mvc
Análisis y Tutorial Progresivo MVC PHP
📁 Estructura del Proyecto Detectada
03.MVC/
├── index.php (punto de entrada)
├── controllers/
│ └── controller.php (MvcController)
├── models/
│ └── model.php (EnlacesPaginas)
└── views/
├── template.php (plantilla principal)
└── modules/
├── navegacion.php
├── inicio.php
├── nosotros.php
├── servicios.php
└── contactenos.php📘 PASO 1: Configuración Inicial - El Punto de Entrada
Archivo: index.php
<?php
require_once "controllers/controller.php";
require_once "models/model.php";
$mvc = new MvcController();
$mvc -> plantilla();
?>Explicación:
Se incluyen los archivos del controlador y modelo
Se crea una instancia del controlador principal
Se llama al método
plantilla()que inicia la aplicación
Tutorial Paso 1:
// Crea tu archivo index.php en la raíz del proyecto
// Este será el único punto de acceso público📘 PASO 2: El Controlador Principal
Archivo: controllers/controller.php - Versión Inicial
<?php
class MvcController {
# LLAMADA A LA PLANTILLA
public function plantilla(){
# include() Se utiliza para invocar el archivo que contiene código html
include "views/template.php";
}
# INTERACCIÓN DEL USUARIO
public function enlacesPaginasController(){
$enlacesController = $_GET["action"];
echo $enlacesController;
}
}
?>Explicación:
plantilla(): Carga la vista principal (template.php)enlacesPaginasController(): Captura el parámetro "action" de la URL
Tutorial Paso 2:
// Crea la carpeta "controllers"
// Dentro crea controller.php con la clase MvcController
// Añade los dos métodos básicos📘 PASO 3: El Modelo Básico
Archivo: models/model.php - Versión 1
<?php
class EnlacesPaginas{
public function enlacesPaginasModel($enlacesModel){
return $enlacesModel;
}
}
?>Explicación:
Modelo simple que solo retorna el valor recibido
Más adelante se implementará la lógica de enrutamiento
Tutorial Paso 3:
// Crea la carpeta "models"
// Dentro crea model.php con la clase EnlacesPaginas
// Implementa el método que recibe y retorna parámetros📘 PASO 4: La Vista Principal (Template)
Archivo: views/template.php - Versión 1
<!DOCTYPE html>
<html>
<body>
<header>
<h1>LOGOTIPO</h1>
</header>
<?php
include "modules/navegacion.php";
?>
<section>
<h1>PÁGINA DE INICIO</h1>
</section>
</body>
</html>Explicación:
Estructura HTML básica
Incluye la navegación desde un archivo separado
Tiene contenido estático
Tutorial Paso 4:
// Crea la carpeta "views"
// Dentro crea template.php con la estructura HTML
// Crea subcarpeta "modules" para las vistas parciales📘 PASO 5: Menú de Navegación
Archivo: views/modules/navegacion.php
<nav>
<ul>
<li><a href="index.php">Inicio</a></li>
<li><a href="index.php?action=nosotros">Nosotros</a></li>
<li><a href="index.php?action=servicios">Servicios</a></li>
<li><a href="index.php?action=contactenos">Contáctenos</a></li>
</ul>
</nav>Explicación:
Menú con enlaces que pasan el parámetro
actionEl valor de
actiondetermina qué página mostrar
Tutorial Paso 5:
// En views/modules/ crea navegacion.php
// Añade los enlaces con parámetros GET📘 PASO 6: Mejorando el Modelo - Lógica de Enrutamiento
Archivo: models/model.php - Versión Mejorada
<?php
class EnlacesPaginas{
public function enlacesPaginasModel($enlacesModel){
if($enlacesModel == "inicio" ||
$enlacesModel == "nosotros" ||
$enlacesModel == "servicios" ||
$enlacesModel == "contactenos") {
$module = "views/modules/".$enlacesModel.".php";
}
return $module;
}
}
?>Explicación:
Valida que el enlace sea uno de los permitidos
Construye la ruta al archivo correspondiente
Retorna la ruta del módulo a cargar
Tutorial Paso 6:
// Modifica model.php para incluir la lógica condicional
// La función debe retornar la ruta del archivo vista correspondiente📘 PASO 7: Controlador Completo
Archivo: controllers/controller.php - Versión Final
<?php
class MvcController {
# LLAMADA A LA PLANTILLA
public function plantilla(){
# include() Se utiliza para invocar el archivo que contiene código html
include "views/template.php";
}
# INTERACCIÓN DEL USUARIO
public function enlacesPaginasController(){
$enlacesController = $_GET["action"];
$respuesta = EnlacesPaginas::enlacesPaginasModel($enlacesController);
include $respuesta;
}
}
?>Explicación:
Obtiene el valor de
actiondesde la URLPasa ese valor al modelo para procesamiento
El modelo retorna la ruta del archivo vista
Incluye dinámicamente la vista correspondiente
Tutorial Paso 7:
// Actualiza el controlador para:
// 1. Capturar el parámetro GET
// 2. Llamar al modelo pasando el parámetro
// 3. Incluir la vista que retorna el modelo📘 PASO 8: Template Dinámico
Archivo: views/template.php - Versión Final
<!DOCTYPE html>
<html>
<body>
<header>
<h1>LOGOTIPO</h1>
</header>
<?php
include "modules/navegacion.php";
?>
<section>
<?php
$mvc = new MvcController();
$mvc -> enlacesPaginasController();
?>
</section>
</body>
</html>Explicación:
Ahora el contenido de la sección es dinámico
Instancia el controlador y llama al método que carga vistas
El contenido cambia según el valor de
action
Tutorial Paso 8:
// Modifica template.php para que:
// 1. Cree una instancia del controlador
// 2. Llame a enlacesPaginasController()
// 3. Esto cargará el contenido dinámico📘 PASO 9: Crear las Vistas Individuales
Ejemplo: views/modules/inicio.php
<h1>PÁGINA DE INICIO</h1>
<p>Bienvenido al sistema MVC.</p>Ejemplo: views/modules/servicios.php
<h1>PÁGINA DE SERVICIOS</h1>
<table border="1">
<tr>
<th>Servicio</th>
<th>Descripción</th>
</tr>
<tr>
<td>Consultoría</td>
<td>Asesoramiento especializado</td>
</tr>
<tr>
<td>Desarrollo</td>
<td>Creación de aplicaciones web</td>
</tr>
</table>Tutorial Paso 9:
// Crea en views/modules/:
// - inicio.php
// - nosotros.php
// - servicios.php
// - contactenos.php
// Cada archivo debe contener el HTML específico de esa página📘 PASO 10: Mejoras y Consideraciones Finales
1. Manejo de Casos por Defecto
// En models/model.php
public function enlacesPaginasModel($enlacesModel){
if($enlacesModel == "inicio" ||
$enlacesModel == "nosotros" ||
$enlacesModel == "servicios" ||
$enlacesModel == "contactenos") {
$module = "views/modules/".$enlacesModel.".php";
} else {
$module = "views/modules/inicio.php"; // Página por defecto
}
return $module;
}2. Controlador con Validación
// En controllers/controller.php
public function enlacesPaginasController(){
if(isset($_GET["action"])){
$enlacesController = $_GET["action"];
} else {
$enlacesController = "inicio";
}
$respuesta = EnlacesPaginas::enlacesPaginasModel($enlacesController);
include $respuesta;
}3. Navegación Mejorada
<!-- En views/modules/navegacion.php -->
<nav>
<ul>
<li><a href="index.php?action=inicio">Inicio</a></li>
<li><a href="index.php?action=nosotros">Nosotros</a></li>
<li><a href="index.php?action=servicios">Servicios</a></li>
<li><a href="index.php?action=contactenos">Contáctenos</a></li>
</ul>
</nav>🔄 FLUJO COMPLETO DEL MVC
Usuario visita:
index.php?action=serviciosindex.php carga controlador y modelo
Controlador ejecuta
plantilla()template.php incluye navegación y llama a
enlacesPaginasController()Controlador obtiene
"servicios"de$_GET["action"]Controlador llama al Modelo:
EnlacesPaginas::enlacesPaginasModel("servicios")Modelo valida y retorna:
"views/modules/servicios.php"Controlador incluye:
include "views/modules/servicios.php"Usuario ve la página de servicios
📊 Resumen de Archivos Finales
Estructura Completa:
03.MVC/
├── index.php
├── controllers/
│ └── controller.php (MvcController)
├── models/
│ └── model.php (EnlacesPaginas)
└── views/
├── template.php
└── modules/
├── navegacion.php
├── inicio.php
├── nosotros.php
├── servicios.php
└── contactenos.phpContenido Clave de Cada Archivo:
index.php - Punto de entrada único
controller.php - Orquesta modelo y vista
model.php - Lógica de negocio (enrutamiento)
template.php - Esqueleto HTML
navegacion.php - Menú de navegación
inicio.php, nosotros.php, etc. - Contenido específico
🚀 Próximos Pasos para Mejorar
Sistema de rutas amigables (eliminar
?action=)Base de datos (conexión PDO o MySQLi)
Sistema de sesiones y autenticación
Validación de formularios
Manejo de errores y excepciones
Sistema de plantillas más avanzado
Cache y optimización
Comentarios
Publicar un comentario