4-mvc

 

Análisis y Tutorial Progresivo MVC PHP

📁 Estructura del Proyecto Detectada

text
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
<?php
require_once "controllers/controller.php";
require_once "models/model.php";

$mvc = new MvcController();
$mvc -> plantilla();
?>

Explicación:

  1. Se incluyen los archivos del controlador y modelo

  2. Se crea una instancia del controlador principal

  3. Se llama al método plantilla() que inicia la aplicación

Tutorial Paso 1:

php
// 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
<?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:

  1. plantilla(): Carga la vista principal (template.php)

  2. enlacesPaginasController(): Captura el parámetro "action" de la URL

Tutorial Paso 2:

php
// 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
<?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:

php
// 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

html
<!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:

php
// 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

html
<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 action

  • El valor de action determina qué página mostrar

Tutorial Paso 5:

php
// 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
<?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:

php
// 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
<?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:

  1. Obtiene el valor de action desde la URL

  2. Pasa ese valor al modelo para procesamiento

  3. El modelo retorna la ruta del archivo vista

  4. Incluye dinámicamente la vista correspondiente

Tutorial Paso 7:

php
// 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

html
<!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:

php
// 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

php
<h1>PÁGINA DE INICIO</h1>
<p>Bienvenido al sistema MVC.</p>

Ejemplo: views/modules/servicios.php

html
<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:

php
// 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

php
// 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

php
// 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

html
<!-- 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

  1. Usuario visitaindex.php?action=servicios

  2. index.php carga controlador y modelo

  3. Controlador ejecuta plantilla()

  4. template.php incluye navegación y llama a enlacesPaginasController()

  5. Controlador obtiene "servicios" de $_GET["action"]

  6. Controlador llama al ModeloEnlacesPaginas::enlacesPaginasModel("servicios")

  7. Modelo valida y retorna: "views/modules/servicios.php"

  8. Controlador incluye: include "views/modules/servicios.php"

  9. Usuario ve la página de servicios


📊 Resumen de Archivos Finales

Estructura Completa:

text
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.php

Contenido Clave de Cada Archivo:

  1. index.php - Punto de entrada único

  2. controller.php - Orquesta modelo y vista

  3. model.php - Lógica de negocio (enrutamiento)

  4. template.php - Esqueleto HTML

  5. navegacion.php - Menú de navegación

  6. inicio.php, nosotros.php, etc. - Contenido específico


🚀 Próximos Pasos para Mejorar

  1. Sistema de rutas amigables (eliminar ?action=)

  2. Base de datos (conexión PDO o MySQLi)

  3. Sistema de sesiones y autenticación

  4. Validación de formularios

  5. Manejo de errores y excepciones

  6. Sistema de plantillas más avanzado

  7. Cache y optimización

Comentarios

Entradas más populares de este blog

token

¿Qué es un token y cómo se utiliza en una API?

Generación de Credenciales API