PadawansTrainer

CRUD en PHP (MVC y POO)

CRUD en PHP (MVC y POO)
Haciendo nuestro propio microframework
En este curso técnico, desarrollamos un CMS escalable para gestión de contenidos aplicando POO avanzada, el patrón MVC y el motor PDO.
Aprendé a diseñar ruteadores dinámicos, un Query Builder propio, persistencia de datos mediante anotaciones y distribución modular con Composer.
Formación para quienes buscan una comprensión profunda del desarrollo web con estándares de instituto privado, disponible sin costo a través de YouTube. Ver playlist

¿Que aprenderás en este curso?

Si ya diste tus primeros pasos en PHP, seguramente ya sabés que la web hoy se mueve con Frameworks. Pero hay una gran diferencia entre ser un usuario de herramientas ajenas y ser un desarrollador que entiende qué pasa under the hood.

En este curso no vamos a usar librerías mágicas que resuelven todo con un comando. Vamos a trabajar con PHP Vanilla para construir, desde cero, un Sistema de Manejo de Contenidos (CMS) para un restaurant online.

Con la excusa de armar ese sistema de manejo de contenidos, nos vamos a embarcar en crear nuestro propio mini-framework, inspirado en los ya existentes (como Laravel, Symfony o SlimPHP).

 

El programa cubre desde los cimientos de la arquitectura hasta la calidad de producción:

  • Patrón MVC y Ruteo Dinámico: Centralización total de la lógica de navegación.
  • Persistencia Avanzada y ORM: Creación de un Entity Manager y Query Builder para consultas SQL complejas.
  • Metadatos mediante Anotaciones: Automatización de relaciones entre entidades y validación de formularios leyendo comentarios en el código.
  • Seguridad y Middlewares: Capas de protección de rutas y gestión profesional de excepciones.
  • Distribución y Modularización: Uso de Traits para reutilización de código y empaquetado final mediante Composer.

 

Este contenido ofrece el mismo rigor técnico y pedagógico que una formación arancelada en un instituto especializado, con la ventaja de ser completamente gratuito y accesible a tu propio ritmo

Atención: Este curso aún está en desarrollo y el temario sigue cargándose progresivamente, cuando se sube un nuevo video.
Más contenido disponible próximamente.

Cimientos y Arquitectura MVC

Introducción y Objetivos del Microcurso

Presentamos el proyecto principal: un Gestor de Contenidos (CMS) para la carta de un restaurant online. Definimos por qué vamos a trabajar con PHP Vanilla para entender los procesos internos de los frameworks.

  • Alcance del sistema de productos y categorías.
  • Filosofía de trabajo: Código "Vainilla" vs. Librerías mágicas.
  • Definición de las 4 acciones del CRUD (ABM)
Armado de las maquetas en HTML

Construimos la interfaz visual que servirá de base para todo el sistema, repasando las mejores prácticas para estructurar datos tabulares y formularios de carga.

  • Estructura base con Header, Main y Footer.
  • Diseño de tablas para el listado de registros.
  • Armado de formularios de alta y edición de datos.
Pasando los HTML a PHP y navegación por GET

Iniciamos la migración de las maquetas estáticas a un entorno dinámico. Aprendé a centralizar la estructura de tu web para no repetir código innecesario.

  • Modularización con include y require.
  • Gestión de navegación mediante parámetros de URL ($_GET).
  • Validación de entidades y seguridad básica en la carga de archivos
URLs Amigables usando .htaccess

Mejoramos la estética y el SEO de nuestra aplicación transformando las URLs "sucias" en rutas profesionales y legibles.

  • Configuración del motor de reescritura de Apache (RewriteEngine).
  • Uso de expresiones regulares para capturar parámetros.
  • Diferencia entre rutas relativas y absolutas en el servidor.
Creando los controladores (Controllers)

Entramos de lleno en el patrón MVC delegando la lógica de navegación a clases específicas que responden a las acciones del usuario.

  • Definición de controladores y Namespaces.
  • Uso de métodos públicos y estáticos para disparar acciones.
  • Asociación de URLs a métodos específicos del controlador.
Autoload y disparando los métodos "automágicamente"

Optimizamos la carga de recursos creando un cargador automático de clases, permitiendo que el sistema escale sin tener que importar archivos manualmente.

  • Implementación de un autoload basado en el sistema de archivos.
  • Instanciación dinámica de clases según la URL.
  • Retorno de vistas y datos desde el controlador hacia la interfaz.

El Motor del Framework: Persistencia y Lógica

Base de datos: Diagrama y Script de creación

Planificamos la estructura donde vivirá la información de nuestro sistema, asegurando la integridad de los datos mediante la normalización.

  • Modelado de tablas con MySQL Workbench.
  • Normalización de datos: Relaciones entre productos y categorías.
  • Exportación de scripts SQL para entornos de producción.
Los Modelos (Models) y conexión por PDO

Representamos nuestras tablas de la base de datos como objetos PHP, estableciendo una comunicación segura y profesional con el servidor SQL.

  • Conexión segura mediante PDO y constantes de configuración.
  • Mapeo de columnas a atributos de clase.
  • Introducción a los Getters y Setters para el manejo de información.
Insert, Update y Delete (Acciones ABM)

Completamos el ciclo de vida de los datos implementando las acciones de escritura y borrado directamente desde nuestros modelos.

  • Procesamiento de datos enviados por POST.
  • Lógica de inserción y actualización de registros.
  • Redirecciones automáticas tras completar acciones de base de datos.
Creando un Entity Manager

Refactorizamos nuestro código para evitar la duplicidad.
Creamos una clase maestra que centraliza todas las operaciones comunes de la base de datos.

  • Herencia de clases aplicada a modelos de datos (extends).
  • Uso de visibilidad protected para compartir recursos.
  • Abstracción de nombres de tablas y atributos.
Query Builder y Repositories

Desarrollamos una herramienta potente para armar consultas SQL complejas de forma dinámica y desacoplamos la lógica del controlador usando Repositorios.

  • Construcción de un generador de consultas (Select, Join, Where).
  • Implementación del patrón Repository para limpiar los controladores.
  • Manejo de filtros dinámicos y ordenamiento de datos.
Los Setters de las entidades (POO avanzada)

Mejoramos nuestro primero acercamiento a la Programación Orientada a Objetos automatizando el mapeo de datos mediante técnicas avanzadas de introspección.

  • Uso de ReflectionClass para analizar atributos en tiempo de ejecución.
  • Automatización de tokens de reemplazo para PDO.
  • Captura automática del ID generado en nuevas inserciones.

Creamos métodos setters y getters para manipular los atributos de nuestras entidades.

Traer entidades relacionadas (Annotations y Depth)

Aprendé a leer comentarios en el código para establecer relaciones entre tablas de forma automática, manejando la profundidad de los datos.

  • Introducción a los Annotations (Anotaciones) en PHP.
  • Cardinalidades: Relaciones Many-to-Many y Many-to-One.
  • Control de profundidad (depth) para evitar bucles infinitos en el mapeo.
Guardar las relaciones leyendo los Annotations

Automatizamos la persistencia de datos vinculados en tablas intermedias, asegurando que las relaciones se mantengan íntegras al crear o editar registros.

  • Persistencia automática en tablas de categorización.
  • Sincronización de relaciones Many-to-Many.
  • Autocompletado dinámico de checkbox y select en los formularios.
Upload de Archivos desde los Annotations

Implementamos un sistema de carga de archivos inteligente que se encarga de procesar imágenes y guardarlas en el servidor de forma automática.

  • Manejo de inputs de tipo file.
  • Uso de la librería GD para redimensionar imágenes (Resize).
  • Conversión dinámica de formatos (JPG, PNG, WebP) desde el modelo.
Traits: Modularizando funcionalidades comunes

Aprendé a usar los Traits para organizar mejor tu código, separando las responsabilidades de archivos, relaciones y atributos del núcleo del sistema.

  • Concepto de reutilización horizontal de código.
  • Desglose del Entity Manager en módulos independientes.
  • Resolución de colisiones de métodos entre diferentes Traits.

Seguridad, Calidad Profesional y Distribución

Validación de Formularios con Annotations

Añadimos una capa de seguridad en el backend para validar que los datos recibidos cumplan con las reglas de negocio antes de guardarlos.

  • Definición de reglas de validación (Required, MinLength, Email).
  • Uso de Annotations para validar atributos de forma visual.
  • Gestión de mensajes de error personalizados por cada campo.
Middlewares y Routes desde PHP

Migramos nuestro ruteo del .htaccess a una clase PHP propia, permitiendo una gestión mucho más flexible y segura de los accesos.

  • Creación de una clase Router profesional.
  • Implementación de Middlewares para proteger rutas específicas.
  • Segmentos dinámicos en URLs para el manejo de IDs.
Login y verificación de usuarios Admin

Construimos un sistema de autenticación robusto para proteger el panel de control y diferenciar usuarios comunes de administradores.

  • Gestión de sesiones seguras en PHP.
  • Verificación de credenciales y encriptado de contraseñas.
  • Redirecciones automáticas mediante excepciones personalizadas.
Optimizar rutas ABM en un solo método

Simplificamos drásticamente la configuración de nuestras entidades creando un método que genera automáticamente todas las rutas necesarias para un CRUD.

  • Implementación del método crud() en el sistema de ruteos.
  • Escalabilidad: Habilitá una nueva entidad en segundos.
  • Uso de parámetros nombrados para una configuración más legible.
Compatibilidad PHP 8.4

Resolvemos errores al cambiar la versión de PHP sobre la que está corriendo el proyecto, a fin de aprender cómo tratar las advertencias ante la evolución del lenguaje de programación para que el framework sea estable y profesional.

  • Solución a las propiedades dinámicas deprecadas.
  • Manejo de tipos nulos en atributos tipados.
  • Ajustes de visibilidad y métodos mágicos en el Entity Model.
Variables de Entorno (.env)

Separamos la configuración sensible del código fuente, permitiendo que tu aplicación se adapte fácilmente a diferentes servidores.

  • Creación de un cargador de archivos .env (Environment Loader).
  • Gestión de credenciales de base de datos por entorno (Local vs. Prod).
  • Acceso a variables globales mediante getenv() o $_ENV.