← Índice del curso

Material descargable

⬇️ Descargar el código

Acá está el código de todos los POCs y ejercicios del curso, empaquetado pieza por pieza. Bajate solo lo que necesites: cada zip trae su README.md con los pasos para levantarlo.

Lo único que necesitás instalar es Docker. Ni PHP, ni Composer, ni MySQL: todo corre en contenedores.

La opción cómoda

Todo el curso en un solo archivo

Los 24 POCs y los 11 ejercicios juntos, ordenados por clase, con un índice adentro. Pesa 301 KB: se baja una vez y te lo llevás entero.

⬇️ Descargar todo (301 KB)
ipap-php-laravel-codigo/
LEEME.md
clase-01/ … clase-12/
un directorio por clase
poc-1-… · poc-2-…
las pruebas de concepto
ejercicio/
el desafío de la clase

Clase por clase

Si solo querés lo de una clase puntual, bajá nada más esa pieza.

01 Clase 1 · La web y los fundamentos de PHP 8

🧪 POC 1 · "Hola PHP" — una página dinámica

un servidor web con PHP ejecuta código en cada pedido y devuelve HTML ya armado. No es un archivo estático: el contenido cambia solo.

🧪 POC 2 · Playground de PHP 8

ver la sintaxis básica de PHP funcionando: tipos, operadores, arrays, funciones y las novedades de PHP 8. Es un script de consola pensado para ir recorriendo bloque por bloque.

🚩 El recibo en cero

El liquidador calcula todos los netos en cero. Hay que encontrar por qué — y ojo con el concepto que no es ni haber ni descuento.

02 Clase 2 · POO, Composer y tu primer Laravel

🧪 POC 1 · Programación Orientada a Objetos en PHP

en Laravel todo son clases (controllers, modelos, servicios…). Antes de tocar Laravel hay que entender POO. Este POC recorre los conceptos con un ejemplo cercano al proyecto del curso: empleados que se pueden liquidar.

🧪 POC 2 · Tu primer proyecto Laravel (nace el Liquidador)

con un comando, Composer nos arma un proyecto Laravel completo y funcional. Este proyecto es la semilla del Liquidador de RRHH que crece todo el curso.

🚩 El pasante fantasma

Falta una clase. Hay que crearla en la ruta exacta que dicta PSR-4, o el autoload no la encuentra nunca.

03 Clase 3 · MVC, ruteo y el ciclo de una petición

🧪 POC 1 · Rutas y Controllers (MVC en acción)

una ruta conecta una URL con un controller, el controller prepara los datos y se los pasa a una vista. Ese es el triángulo MVC.

🧪 POC 2 · Middleware (el filtro de la petición)

un middleware es un filtro por el que pasa la petición antes de llegar al controller. Puede dejarla pasar, modificarla o cortarla.

🚩 La ruta que no lleva a ninguna parte

Una petición entra y no llega al controller. El programa imprime los 8 pasos del ciclo de vida para ver dónde se corta.

04 Clase 4 · Blade, formularios y validación

🧪 POC 1 · Blade: layouts y componentes

con Blade, el HTML deja de repetirse. Un layout se escribe una vez y todas las páginas lo heredan; un componente es una pieza reutilizable.

🧪 POC 2 · Formularios y validación

un formulario envía datos (POST), Laravel los valida, y si algo está mal vuelve al formulario con los errores y lo que el usuario ya había escrito. Si está todo bien, muestra un mensaje flash de éxito.

🚩 El formulario que confía

El alta acepta cualquier cosa, y un nombre con <script> termina ejecutándose en la pantalla del que mira el listado.

05 Clase 5 · Base de datos, migraciones y seeders

🧪 POC 1 · Laravel + MySQL (nace la base de datos)

los datos "a mano" desaparecen. Ahora Laravel guarda y lee de una base de datos MySQL real, con el esquema definido por migraciones y datos de prueba cargados con seeders y factories.

🧪 POC 2 · Query Builder

el Query Builder arma consultas SQL de forma fluida y legible (where, orderBy, join, groupBy, agregaciones) sin escribir SQL a mano y protegiendo contra inyección.

🚩 La base que no arranca

Migraciones que corren en el orden equivocado, una clave foránea que no protege nada y una consulta que no dice lo que pidió RRHH.

06 Clase 6 · Eloquent ORM y relaciones

🧪 POC 1 · CRUD completo con Eloquent

con Eloquent cada tabla es un objeto. Un CRUD (alta, baja, modificación, listado) se escribe cortito y legible, y las relaciones se navegan con $empleado->departamento->nombre (¡sin JOINs a mano!).

🧪 POC 2 · Relaciones Eloquent (1-1, 1-N, N-N)

Eloquent modela las relaciones del mundo real. En vez de JOINs, navegamos objetos: $empleado->cuenta, $empleado->liquidaciones[0]->conceptos, $empleado->proyectos.

🚩 Los modelos que no se hablan

Las tablas están, los modelos también, pero no se conocen. Y cada corrida CUENTA LAS CONSULTAS: el N+1 se ve en números.

07 Clase 7 · Arquitectura backend: servicios e inyección de dependencias

🧪 POC 1 · Inyección de dependencias y Service Container

el controller pide un contrato (interfaz), no una clase concreta. El Service Container de Laravel, siguiendo un binding, le entrega la implementación correcta ya construida. Cambiás el binding → cambia el comportamiento, sin tocar el controller.

🧪 POC 2 · Repository + Service Layer (controllers flacos)

la lógica de negocio no va en el controller. Va en un Service, que a su vez pide los datos a un Repository. El controller solo coordina. Controller → Service → Repository → datos.

🚩 El controller que hace todo

Cada corrida dibuja el árbol de dependencias que arma el contenedor. Verifica el desacople inyectando un service impostor.

08 Clase 8 · APIs REST y consumo de servicios

🧪 POC 1 · API REST del Liquidador

el Liquidador expone sus datos en JSON para que otros sistemas los consuman. Cada verbo HTTP hace una operación y devuelve el código de estado correcto.

🧪 POC 2 · Consumir una API externa

así como exponemos una API (POC 1), también podemos consumir APIs de otros. Con el HTTP Client de Laravel (Http::get) pedimos datos a dolarapi.com y los mostramos en nuestra app.

🚩 La API que siempre dice que sí

Una API que contesta 200 para todo, y un cliente HTTP falso al que se le puede provocar una caída, una demora o una respuesta basura.

09 Clase 9 · Autenticación y autorización

🧪 POC 1 · Autenticación con tokens (Sanctum)

en una API no hay "sesión" como en la web. El usuario se loguea, recibe un token, y lo manda en cada pedido. Sin token válido, las rutas protegidas responden 401.

🧪 POC 2 · Roles y permisos (autorización)

estar logueado no alcanza. La autorización decide qué puede hacer cada usuario. Con un Gate, una ruta solo la ven los administradores; el resto recibe 403.

🚩 El recibo del vecino

El verificador ATACA: se loguea como un empleado común y trata de leer el recibo de otro cambiando un número en la URL.

10 Clase 10 · Validación avanzada, errores y logging

🧪 POC 1 · Form Requests y reglas personalizadas

la validación sale del controller y va a su propia clase (Form Request). Y cuando las reglas que trae Laravel no alcanzan, escribís tu propia regla (acá, un validador real de CUIT con dígito verificador).

🧪 POC 2 · Manejo de errores y logging

los errores se manejan prolijamente (no un 500 genérico) con excepciones propias, y todo lo importante queda registrado en el log para poder diagnosticar después.

🚩 El error que nadie entiende

El usuario ve el SQLSTATE completo y el log guarda su contraseña. El verificador LEE el archivo de log que dejó tu código.

11 Clase 11 · Microservicios, colas, cache y Redis

🧪 POC 1 · Colas con Redis (trabajo en segundo plano)

el trabajo pesado (liquidar a miles de empleados) no se hace mientras el usuario espera. Se encola un trabajo (Job) y un worker lo procesa en segundo plano. El usuario recibe la respuesta al instante.

🧪 POC 2 · Cache con Redis

si un cálculo es pesado y su resultado no cambia todo el tiempo, lo guardamos en cache (Redis) y lo servimos al instante en vez de recalcularlo. Se ve clarísimo comparando tiempos.

🎓 Ejercicio final · Tu propio Liquidador

No tiene solución: una IA te entrevista con cuatro preguntas y construís tu propio módulo de liquidación. Son 81 sistemas posibles y todos funcionan. Incluye la receta para pegarle al asistente que uses.

12 Clase 12 · Docker, testing y deploy (cierre)

🧪 POC 1 · Testing con PHPUnit

los tests son un "seguro" del código: verifican solo, automáticamente, que todo siga funcionando. Si algo se rompe, un test rojo te avisa antes que el usuario.

🧪 POC 2 · El stack completo con Docker

todo lo que vimos, junto y orquestado con un solo docker compose up: la app, un worker de colas, MySQL, Redis y Adminer. Es la foto final del sistema.