Skip to content

PatronDiseño

Patron de diseño

Estructura típica de un proyecto PHP utilizando el patrón de diseño Modelo-Vista-Controlador (MVC),


Estructura de Carpetas y Archivos

proyecto/
│
├── app/
│   ├── controllers/      # Controladores (Lógica de la aplicación)
│   │   └── PersonaController.php
│   │
│   ├── models/           # Modelos (Interacción con los datos)
│   │   └── Persona.php
│   │
│   └── views/            # Vistas (Interfaz de usuario)
│       ├── persona/      # Vistas específicas para "Persona"
│       │   ├── index.php
│       │   ├── create.php
│       │   └── edit.php
│       └── layouts/      # Plantillas comunes (cabeceras, pie de página)
│           ├── header.php
│           └── footer.php
│
├── public (o assets)/               # Carpeta pública (accesible desde el navegador)
│   ├── css/              # Archivos CSS
│   │   └── style.css
│   │
│   ├── js/               # Archivos JavaScript
│   │   └── script.js
│   │
│   ├── images/           # Imágenes
│   │   └── logo.png
│   │
│   └── index.php         # Punto de entrada principal de la aplicación
│
├── config/               # Configuración de la aplicación
│   └── config.php        # Configuración de base de datos y otras opciones
│
├── .htaccess             # Configuración para redirección de URLs (opcional)
│
└── README.md             # Documentación del proyecto

Explicación de Carpetas

  1. app/controllers/: Contiene los controladores. Los controladores reciben solicitudes del usuario, procesan los datos mediante los modelos y devuelven la salida apropiada a través de las vistas.
  2. app/models/: Contiene los modelos, que representan la lógica de negocio y se encargan de interactuar con la base de datos o manejar los datos.
  3. app/views/: Contiene las vistas, que son las plantillas HTML utilizadas para mostrar la interfaz de usuario.
  4. public (o assets) /: Carpeta pública accesible desde el navegador. Aquí se colocan los recursos estáticos como CSS, JavaScript e imágenes. También contiene el archivo index.php, que actúa como el punto de entrada para la aplicación.
  5. config/: Carpeta donde se configuran opciones de la aplicación, como la conexión a la base de datos.
  6. .htaccess: Archivo opcional para configurar reglas de redirección de URLs amigables.
  7. README.md: Archivo de documentación que explica el propósito del proyecto, cómo configurarlo y ejecutarlo.

Ejemplo de Archivos

1. public/index.php

<?php
// Cargar configuración y clases necesarias
require_once '../config/config.php';
require_once '../app/controllers/PersonaController.php';

// Enrutamiento simple (para ejemplo)
$page = $_GET['page'] ?? 'persona';
$action = $_GET['action'] ?? 'index';

$controller = new PersonaController();

if ($page === 'persona' && $action === 'index') {
    $controller->index();
}

2. app/controllers/PersonaController.php

<?php

require_once '../app/models/Persona.php';

class PersonaController
{
    public function index()
    {
        // Obtener datos (simulación)
        $personas = Persona::getAll();

        // Cargar la vista
        include '../app/views/persona/index.php';
    }
}

3. app/models/Persona.php

<?php

class Persona
{
    public static function getAll()
    {
        return [
            ['nombre' => 'Juan', 'apellidos' => 'Pérez', 'telefono' => '123456789'],
            ['nombre' => 'Ana', 'apellidos' => 'López', 'telefono' => '987654321']
        ];
    }
}

4. app/views/persona/index.php

<?php include '../app/views/layouts/header.php'; ?>

<h1>Lista de Personas</h1>
<ul>
    <?php foreach ($personas as $persona): ?>
        <li>
            <strong>Nombre:</strong> <?= $persona['nombre']; ?> <br>
            <strong>Apellidos:</strong> <?= $persona['apellidos']; ?> <br>
            <strong>Teléfono:</strong> <?= $persona['telefono']; ?>
        </li>
    <?php endforeach; ?>
</ul>

<?php include '../app/views/layouts/footer.php'; ?>

5. app/views/layouts/header.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Proyecto MVC</title>
    <link rel="stylesheet" href="/css/style.css">
</head>
<body>
<header>
    <h1>Bienvenido a nuestro Proyecto MVC</h1>
</header>
<main>

6. app/views/layouts/footer.php

</main>
<footer>
    <p>© <?= date('Y'); ?> Proyecto MVC. Todos los derechos reservados.</p>
</footer>
</body>
</html>

7. public/css/style.css

body {
    font-family: Arial, sans-serif;
    line-height: 1.6;
    margin: 0;
    padding: 0;
}

header, footer {
    background: #333;
    color: white;
    text-align: center;
    padding: 10px 0;
}

main {
    padding: 20px;
}

8. public/js/script.js

console.log('Bienvenido al proyecto MVC');