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
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.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.app/views/
: Contiene las vistas, que son las plantillas HTML utilizadas para mostrar la interfaz de usuario.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 archivoindex.php
, que actúa como el punto de entrada para la aplicación.config/
: Carpeta donde se configuran opciones de la aplicación, como la conexión a la base de datos..htaccess
: Archivo opcional para configurar reglas de redirección de URLs amigables.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');