Implementar MVC en PHP desde cero (sin frameworks)
¿Quieres organizar tu código PHP de forma profesional y mantenible? En esta guía aprenderás a implementar el patrón de diseño MVC (Modelo-Vista-Controlador) desde cero, sin usar frameworks como Laravel o CodeIgniter. Ideal para proyectos pequeños y medianos donde necesitas control total.
Principios de arquitectura de software
Una buena arquitectura hace que tu código sea:
- Modular: partes independientes que se pueden cambiar sin afectar al todo
- Mantenible: fácil de actualizar y corregir
- Escalable: listo para crecer con nuevas funciones
- Seguro: menos vulnerabilidades por código desorganizado
¿Qué es el patrón MVC?
MVC divide tu aplicación en tres capas claras:
- Modelo: maneja los datos (acceso a base de datos)
- Vista: muestra la interfaz al usuario (HTML, CSS)
- Controlador: recibe peticiones, procesa lógica y decide qué vista mostrar
Estructura de carpetas para MVC en PHP
Crea esta estructura en tu proyecto:
/app
/models
/views
/controllers
/index.php
/config.php
Implementación paso a paso
1. config.php: conexión a la base de datos
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mi_app";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Conexión fallida: " . $conn->connect_error);
}
?>
2. Modelo (UserModel.php)
<?php
require_once '../config.php';
class UserModel
{
private $conn;
public function __construct()
{
global $conn;
$this->conn = $conn;
}
public function getAllUsers()
{
$sql = "SELECT * FROM usuarios";
$result = $this->conn->query($sql);
return $result->fetch_all(MYSQLI_ASSOC);
}
}
?>
3. Controlador (UserController.php)
<?php
require_once '../models/UserModel.php';
class UserController
{
private $model;
public function __construct()
{
$this->model = new UserModel();
}
public function index()
{
$users = $this->model->getAllUsers();
require '../views/users/index.php';
}
}
?>
4. Vista (views/users/index.php)
<?php foreach ($users as $user): ?>
<?php echo $user['nombre']; ?>
<?php echo $user['email']; ?>
<?php endforeach; ?>
Seguridad en formularios y prevención de ataques
Con MVC, puedes centralizar la validación y sanitización:
// En el controlador
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("Email inválido");
}
También previene ataques como XSS y CSRF mediante filtros y tokens.
Autenticación segura de usuarios con PHP y MySQLi
Almacena contraseñas con hash seguro:
$password_hash = password_hash($password, PASSWORD_DEFAULT);
// Para verificar
if (password_verify($password_input, $password_hash)) {
// Contraseña correcta
}
Manejo de sesiones en PHP
Usa sesiones para mantener al usuario autenticado:
session_start();
$_SESSION['user_id'] = $id;
$_SESSION['rol'] = 'admin';
// Verificar en otras páginas
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
}
Uso del inspector del navegador para depuración
Aprende a usar las herramientas del navegador (F12) para:
- Ver errores en la consola (JavaScript)
- Analizar peticiones AJAX
- Inspeccionar cookies y sesiones
- Depurar problemas de redirección
¿Qué sigue después de MVC?
Este es el sexto paso del desarrollo full-stack. En el siguiente módulo, aprenderás a enviar correos automáticos con PHPMailer, ideal para confirmaciones y recuperación de contraseña.
Volver a la Guía Full-Stack → Ver Módulo 5: AJAX y APIs →¿Quieres la versión completa del libro?
Esta guía es una versión resumida del libro "Programación Full-Stack", que incluye:
- ✅ Todos los ejercicios resueltos paso a paso
- ✅ Códigos listos para copiar y probar
- ✅ Explicaciones profundas de seguridad y buenas prácticas
- ✅ Acceso a actualizaciones futuras
¿Tienes dudas o sugerencias? ¡Déjalas en los comentarios!