1 of 33

Laravel

Programación Web II - TUPAR - UNICEN

2 of 33

¿Qué son los web frameworks?

3 of 33

Definición

Un framework para aplicaciones web es un framework diseñado para apoyar el desarrollo de sitios web dinámicos, aplicaciones web y servicios web.

Intenta aliviar el exceso de carga asociado con actividades comunes usadas en desarrollos web. Por ejemplo, a acceder a bases de datos, estructuras para plantillas y gestión de sesiones, y con frecuencia facilitan la reutilización de código.

4 of 33

Ventajas/Desventajas

Ventajas

  • Bibliotecas que facilitan el trabajo
  • Estructura de código estandar
  • Casos de éxito en la industria

Desventajas

  • Puede ser demasiado para nuestro sitio:
    • Mucho código de sobra
    • Muchas bibliotecas de sobra
  • Aumenta la complejidad
  • Puede no ser el mejor Framework para lo que queremos hacer

5 of 33

Frameworks de PHP

6 of 33

Laravel Framework

  • Basado en PHP
  • Construido sobre componentes de Symphony.
  • Usa MVC como patrón de diseño
  • Pensado para desarrollo de aplicaciones web
  • Open Source

7 of 33

Features

  • Packages
  • The Eloquent ORM
  • Migrations
  • Restful controllers
  • Queues and Background Jobs
  • Collections
  • Authentication

8 of 33

Let’s code!

9 of 33

Docker + Composer

> docker run --rm -v $(pwd):/app composer create-project --prefer-dist laravel/laravel LaravelDemo

  • Va a levantar un container de Composer
  • Va a montar la nuestro directorio en /app
  • Va a ejecutar dentro de ese container el comando create-project
  • Cuando termine de ejecutar va a remover el container
  • Nos van a quedar todas las dependencias instaladas dentro de la carpeta LaravelDemo

10 of 33

Folders

  • App: Donde va a estar nuestro código.
  • Bootstrap: Tiene todo para cargar el framework.
  • Config: Toda la configuración
  • Database: Todo lo relacionado a la Base de Datos.
  • Public: El archivo de inicio de la app laravel
  • Resources: Todo lo relacionado con la UI
  • Routes: Todo el manejo de rutas
  • Storage: Tiene los logs y donde almacenamos cosas.
  • Test: Todo lo relacionado con tests
  • Vendor: Todas las bibliotecas de terceros

11 of 33

Repaso MVC

12 of 33

Modelo - Responsabilidades

  • Proteger y persistir los datos del usuario
  • Asegurar la integridad y consistencia de datos
  • Proveer métodos para
    • Consultar Datos
    • Modificar / Borrar Datos
  • En este componente manejamos la comunicacion con la base de datos

13 of 33

Vista - Responsabilidades

  • Comunicar información al usuario
    • Imágenes, fuentes, estilos, etc. (Front end)
  • Dejar al diseñador/Front end dev que se preocupe como los datos y la interfaz es presentada.
  • En esta parte vamos a usar Blade

14 of 33

Controlador - Responsabilidades

  • Intermediario (coordinador) entre la vista y el modelo
  • Procesa y valida los inputs del usuario

Ej:

Cuando una nueva entrada de un usuario llega, el Controller la valida y llama al modelo para modificar los datos, luego actualiza la vista.

15 of 33

Router

  • Además de el Model, View y Controller, tenemos el Router.
  • Es el acceso a nuestra web
  • Todo pasa por ahí y se redirige al controller correspondiente.

16 of 33

Router en Laravel

  • Vamos a Routes/web.php y agregamos una ruta:

Route::get('/hello', function () {

return 'Hello, World!';

});

  • ¿Qué hace esta línea?
    • Crea una ruta, que responde al verbo ‘Get’
    • La url va a ser [nuestro-sitio]/hello
    • Y va a ejecutar esa función, que retorna ‘Hello World’

17 of 33

Closure

Route::get('/hello', function () {

return 'Hello, World!';

});

  • Son la versión de PHP de funciones anónimas
  • Un closure es una función que se puede pasar como un objeto, asignar a una variable, pasarla como parámetro a otras funciones y métodos.

18 of 33

¿Cómo hace para retornar “hello world” y que se muestre?

19 of 33

Middleware

  • ¿Por qué retornó “Hello World” en lugar de usar echo?
  • Hay un montón de “Wrappers” alrededor de los requests en Laravel
  • Algunos de esos, son llamados “Middlewares”
  • Cuando el closure termina, aún no es tiempo de mandar el contenido al browser.
  • Devolver el contenido nos ayuda a continuar con el flujo por todos esos wrappers antes de mandarlo de nuevo al usuario.

Print

HTML

URL Request

Return “Hello”

20 of 33

Creemos un sitio simple y estático

Vamos a crear un sitio con 3 rutas:

  • Home
  • About
  • Productos

Nota: Por ahora solo van a tener texto plano.

21 of 33

Route Verbs

  • Estamos por ahora usando solo Route::get
  • Esta ruta solo va a matchear si el request es de tipo Get.
  • ¿Qué pasa si usamos un form quiere enviar un POST?
  • ¿O si queremos usar requests de tipo PUT o DELETE?

Ejemplos:

Route::delete('/', function () {});��Route::any('/', function () {});��Route::match(['get', 'post'], '/', function () {});

Route::get('/', function () {return 'Hello, World!';});��Route::post('/', function () {});��Route::put('/', function () {});

22 of 33

Usando un controller

  • Cuando nosotros teníamos un Router, siempre terminamos llamando a un controller
  • En Laravel podemos también crear una ruta que use un controller.

Ejemplo

Route::get('/', 'WelcomeController@index');

23 of 33

Route Parameters

  • En cada Route podemos indicar parámetros
  • Parámetros Obligatorios

Route::get('users/{id}/friends', function ($id) {//});

  • Parámetros opcionales

Route::get('users/{id?}', function ($id = 'fallbackId') {//});

24 of 33

Route Parameters - Controller

  • Para pasar un parámetro a un controller, usamos la misma forma:

Route::get('users/{id}/friends', 'UserController@friends' );

  • El método de nuestro controller va a tener un parámetro ‘id’

class UserController extends Controller{public function friends($id){� …..� }}

25 of 33

Constraints parámetros

  • Otra característica es que podemos poner una especie de validación a los parámetros
  • Podemos especificar una Expresión Regular.
  • Si la expresion no matchea, el router no redirige al controller/closure.
  • Ejemplo: Si el id no es numérico, no matchea.

Route::get('users/{id}', function ($id) {//})->where('id', '[0-9]+');

26 of 33

Views

  • Las vistas están en resources/views/
  • Laravel tiene 2 tipos de vistas:
    • Usando Blade (Template Engine)
    • PHP puro
  • Para mostrarlo simplemente llamamos a view(...)

Ejemplo:

Route::get('/', function () {return view('home');});

27 of 33

Refactor

  • Vamos a cambiar nuestra web, para que en lugar de texto plano, tengan HTML.

28 of 33

Como hago para saber la URL de algo?

  • Route Naming
  • Laravel permite que cada ruta tenga un nombre.
  • Nos da la ventaja de poner nombres cortos a rutas complejas.
  • Si las rutas cambian, no tenemos que cambiar nada.

// Defining a route with name in routes/web.php:Route::get('members/{id}', 'MembersController@show')->name('members.show');��// Link the route in a view using the route() helper<a href="<?php echo route('members.show', ['id' => 14]); ?>">

  • La convención es siempre recursoPlural.Accion

29 of 33

Refactor

  • Vamos a agregar links entre las diferentes páginas.

30 of 33

Artisan

  • Artisan es un comando incluido en Laravel.
  • Tiene comandos útiles para asistirnos mientras construimos nuestra app.
  • Para ver los comandos podemos ejecutar:

docker-compose exec app php artisan list

31 of 33

Controller

  • Como vimos podemos hacer que las Routes llamen a un Controller.
  • Vamos a crear un controller, para eso vamos a usar Artisan.
  • Ejemplo

docker-compose exec app php artisan make:controller AboutController

32 of 33

Refactor

  • Vamos a cambiar nuestra web, para que en lugar de closures, use controllers.

33 of 33

Referencias