You are on page 1of 114

PHP y Laravel

Clase 1
Objetos 101

Guido Contreras Woda - @guiwoda

Qu es PHP?

Lenguaje de Scripting

Creado para la web

Tipos dinmicos

> 80% de la Internet

Lenguaje interpretado Gran comunidad


Orientado a Objetos

Cdigo Abierto (Open Source)

Administrador de Dependencias

Composer

Composer

$ composer init
$ composer require vendor/package:~X.Y
$ composer install
$ composer update [vendor/package]

Objetos


Un objeto es una mquina de
software que contiene datos y
expone operaciones
Bertrand Meyer

Objetos (Objects)

Operaciones: Mensajes

Datos: Estado interno

Qu puede hacer

Qu necesita

Cmo lo hace

Con quin colabora

Qu responder

En qu estado est

hagamos cdigo!

Pruebas

Pruebas (Testing)

Define la funcionalidad
Garantiza que la implementacin es correcta
Evita futuros problemas

Pruebas (Testing)

Preparar (Arrange): Construir el contexto de la prueba


Actuar (Act): Ejecutar la accin que queremos probar
Verificar (Assert): Evaluar que los resultados sean los
esperados

hagamos cdigo!
pruebas!

Patrones de diseo

Entidades

Entidades (Entities)

Objeto con identidad nica a travs del tiempo


Parte del modelo del problema (Modelo de Dominio)
Mejor candidato a enriquecer

hagamos cdigo!

Objetos de Valor

Objetos de valor (Value Objects)

Su identidad est basada en el valor de sus atributos


Tienen comportamiento importante para el dominio
Quizs antes eran un tipo bsico
Suelen ser inmutables (que no se pueden modificar)

hagamos cdigo!

Resumen

Resumen

Objetos

Composer

Entidades

Dependencias
Autoloading

Identidad
Modelo del
problema

Estado
Mensajes
Colaboracin
Objetos de Valor
Testing
Herencia
Responsabilidad Definicin
Id <=> estado
Comprobacin Inmutables
Mantenimiento

Hasta la prxima!

PHP y Laravel
Clase 2
PHP en la web

Guido Contreras Woda - @guiwoda

Qu es la web?

Protocolo HTTP

Antes: Pedir un archivo

Lenguaje HTML

PHP Hoy: Ruteo de URI

Arquitectura
Cliente - Servidor

PHP + JS: JSON API +


Client-side programming

Patrones de Arquitectura

Modelo Vista
Controlador (MVC)

Modelo Vista Controlador (MVC)

Separacin de responsabilidades
Modelo: Lgica de negocio (Modelo de Dominio)
Vista: Presentacin visual
Controlador: Coordina las acciones del usuario

Controlador

Controlador (Controller)

Se asocia a uno o ms pedidos HTTP


Traduce el pedido HTTP en un mensaje de dominio
Arma la respuesta al pedido

hagamos cdigo!

Vista

Vista (View)

Representacin grfica de la respuesta


Separa nuestros objetos (PHP) de nuestro lenguaje de
presentacin (HTML)
Poca o ninguna necesidad de lgica

hagamos cdigo!

Modelo

Modelo (Model)

Representa el problema y la solucin implementada


Separa la lgica de negocio de la presentacin
Compone un Modelo de Dominio
Ayuda a entender el problema
Utiliza el Idioma del dominio (la jerga)
Mejora la comunicacin devs - cliente
Crece junto con el negocio

Cualquiera puede escribir cdigo que


una mquina entienda.
Un buen programador escribe cdigo
que otro humano entender.
Martin Fowler

hagamos cdigo!

Colecciones

Colecciones (Collections)

Objetos que representan una coleccin de otros


Buscar entre la coleccin
Agregar y quitar de la coleccin
Filtrar la coleccin
etc.

hagamos cdigo!

Resumen

Resumen

Web

Controladores

Modelo

Protocolo HTTP Reciben pedido


HTML (CSS - JS) Delegan mensaje
Cliente - Servidor Arman la vista

Problema
Comunicacin
Idioma, jerga

MVC

Colecciones

Vista

Patrn de Arq.
Representa la
Separacin de
grfica
Responsabilidad Poca lgica

Contiene objs.
Mensajes ms
claros

Hasta la prxima!

PHP y Laravel
Clase 3
Buenas Prcticas

Guido Contreras Woda - @guiwoda

Patrones de Arquitectura

Capas (Layers)

Capas (Layers)

Separa los roles a nivel de arquitectura


Define la interaccin entre cada rol
Ayuda a construir software ms robusto
Evita el cdigo spaghetti

Capas (Layers)
Http
Controllers
Views

Consola
Commands

API
Controllers
Transformers

Modelo de dominio
Entities
Services
Value Objects
Events Exceptions
Infraestructura - Datos
Repositories (base de datos)
Adapters (APIs)

hagamos cdigo!

Servicios

Servicios (Services)

Coordinadores de dominio
No tienen estado (stateless)
Se comunica con infraestructura
Responde pedidos de capas superiores

hagamos cdigo!

Persistencia

Bases de datos

Bases de datos

Crear / Editar / Eliminar


datos
Guardar datos entre
pedidos
Optimizados para
bsqueda
Transaccionalidad

Relacionales (SQL)
MySQL
Oracle
PostgreSQL etc...
No relacionales (NoSQL)
MongoDB
Redis

Cassandra
etc...

Bases de datos

PDO - PHP Data Objects


Abstraccin de base de datos
Modelo de objetos
Estndar recomendado por la comunidad

hagamos cdigo!

Repositorios

Repositorios (Repositories)

Encapsulan el acceso a datos


Se modelan como una coleccin
Separan lgica de persistencia

hagamos cdigo!

Errores y
Excepciones

Errores y Excepciones (Exceptions)

Detienen el flujo normal de la aplicacin


Comunican qu fall
Nos permiten reaccionar al error y decidir cmo
continuar

hagamos cdigo!
errores!

Eventos

Eventos (Events)

Modelan un hecho que ya sucedi


Otros objetos pueden reaccionar a ellos
Nos permite agregar efectos secundarios
Arquitectura orientada a eventos

hagamos cdigo!

Resumen

Capas

Base de datos

Excepciones

Define roles
Separacin de
arquitectura

Almacenar
Buscar
Persistencia

Detiene flujo
Recuperacin
Notificacin

Servicios

Repositorios

Eventos

Coordinacin
Comunicacin
Sin estado

Acceso datos
Coleccin
Separa capas

Hecho pasado
Efectos
secundarios

Gracias
@guiwoda
/guiwoda

Laravel
Clase 1
Fundamentos

Joseph Cohen - @joecohens

Qu es Laravel?
Laravel es un framework moderno de PHP

Objetivos

Empezar proyectos rpidamente


Divertido de usar
Fcil de entender
Promueve buenas prcticas
Promueve los patrones S.O.L.I.D

La base
Composer
Componentes de Symfony
Swiftmail
Monolog
Carbon
PSR-7
Y ms ...

Principales Caractersticas

Artisan CLI

Cache

Controladores

Eventos

Eloquent ORM

Autenticacin

Migraciones

Queues

Blade templates

ACL

Poderoso Router

Poderoso contenedor

Ecosistema
Homestead
Support
Cashier y Socialite
Elixir
Forge
Envoyer

INSTALACIN

Mquinas Virtuales
Y
Homestead

Configuracin

Rutas

Rutas
Mtodos HTTP (GET, POST, PUT, PATCH, DELETE)
Configuracin de parmetros
Requeridos
Opcionales
Regex
Agrupadas
Por nombre

HAGAMOS RUTAS!

Controladores

Controladores

Recibe pedidos y respuestas HTTP


Ayudan a organizar cdigo para no llenar las rutas
Acceso a inyeccin de dependencias
Por medio del constructor
Por medio de cada mtodo

hagamos cdigo!

Blade

Blade

Simple pero poderoso


Puede ejecutar PHP directamente
Compila a PHP y se guardan en Cache
Herencia de vistas

Sintaxis
{{ variable }} {{{ variable_crudo }}} @{{ javascript }}
@extend(layout)
@section(lateral) @stop
@if(true) @else @endif
@foreach($vars as $var) @endforeach
@unless(false) @endunless
@include(parcial)

hagamos cdigo!

Elixir

Artisan

Lnea de comando
Crear clases con facilidad
Crear migraciones de bases de datos
Configura y controla Queues
Configura y limpia Cache
Llenar la base de datos con datos de prueba
Acceso a la aplicacin por medio de la consola

Migraciones

Migraciones

Control de versin para la base de datos


Mapeo de campos de base de datos
Fcil de compartir con otros desarrolladores
Fcil de hacer cambios al esquema de base de datos
Posibilidad de regresar cambios

hagamos cdigo!

Modelos y Eloquent

Modelos y Eloquent
API Comn para varias bases de datos
Simple ActiveRecord
Cada tabla tiene su modelo
Operaciones Select, Insert, Update, Delete
Definen relaciones entre ellos
Uno a uno
Uno a muchos
Muchos a muchos

Relaciones

Colecciones

Colecciones

Validacin

Autenticacin

Service Container

Service Container
Control de dependencias
Inyeccin de dependencias
Mltiples formas de crear instancias
Bind
Singleton
Instance

hagamos cdigo!

Repositorios

Eventos

Eventos

Patrn simple de Observer en PHP


Mltiples suscriptores a un evento
Desacoplan cdigo procedural
Ayudan a extender funcionalidad

hagamos cdigo!

Queues

Queues

Provee un API comn para varios servicios de Queues


Mandar tareas a segundo plano
Control de tareas en segundo plano

hagamos cdigo!

Tests

Test
Precargado con PHPUnit
Herramientas para test de funcionalidad
Model Factory para crear mocks de modelos
Migrar la base de datos
Esperar eventos
Y ms

hagamos cdigo!

Comandos

Paquetes

Deploy

Gracias
@joecohens
/joecohens

You might also like