aprende-laravel

Aprende Laravel 6: guía práctica paso a paso Jon Vadillo Romero Este libro está a la venta en http://leanpub.com/aprende

Views 147 Downloads 3 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Citation preview

Aprende Laravel 6: guía práctica paso a paso Jon Vadillo Romero Este libro está a la venta en http://leanpub.com/aprende-laravel Esta versión se publicó en 2020-01-19

Este es un libro de Leanpub. Leanpub anima a los autores y publicadoras con el proceso de publicación. Lean Publishing es el acto de publicar un libro en progreso usando herramientas sencillas y muchas iteraciones para obtener feedback del lector hasta conseguir tener el libro adecuado.

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License

Este libro está dedicado a todas las personas que de una forma u otra ayudan a mantener y mejorar el ecosistema actual de aprendizaje. Desde los más expertos que comparten su conocimiento para que el resto de personas podamos seguir aprendiendo sin encontrar barrereas hasta a los más principiantes que con su motivación por aprender hacen que el resto sintamos que compartir y enseñar merece la pena.

Índice general Introducción . . . . . . . . . . . Prerequisitos . . . . . . . . . ¿Qué es Laravel? . . . . . . Características principales Ecosistema Laravel . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

1 1 1 2 2

Preparar el entorno de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

Tu primera aplicación en 8 pasos . . . . . . Paso 1 - Crea tu primer proyecto . . . . Paso 2 - Configura el proyecto . . . . . . Paso 3 - Crear un Router . . . . . . . . . Paso 4 - Crear una vista . . . . . . . . . . Paso 5 - Crear un Controlador . . . . . . Paso 6 - Configurar la base de datos . . Paso 7 - Crear la Migración (Migration) Paso 8 - Crear un Modelo . . . . . . . . . Bonus - Opciones (flags) de Artisan . . Práctica 1 . . . . . . . . . . . . . . . . . . . Práctica 2 . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . . . . . . . . .

. . . . .

. . . . . . . . . . . .

. . . . .

. . . . . . . . . . . .

. . . . .

. . . . . . . . . . . .

. . . . .

. . . . . . . . . . . .

. . . . .

. . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

8 8 8 9 10 13 14 15 17 21 22 22

Level up: Laravel nivel intermedio . . . . . . . . . . . . Borrado de registros . . . . . . . . . . . . . . . . . . . Práctica 3 . . . . . . . . . . . . . . . . . . . . . . . . . . Formularios . . . . . . . . . . . . . . . . . . . . . . . . Práctica 4 . . . . . . . . . . . . . . . . . . . . . . . . . . Construir layouts . . . . . . . . . . . . . . . . . . . . . Práctica 5 . . . . . . . . . . . . . . . . . . . . . . . . . . Asignar nombres a las rutas . . . . . . . . . . . . . . Utilizar Bootstrap en tu proyecto . . . . . . . . . . . Relaciones One-to-Many . . . . . . . . . . . . . . . . Consejo: cómo añadir columnas a modelo existente Generar datos de prueba . . . . . . . . . . . . . . . . Práctica 6 . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

23 23 23 24 25 25 26 27 27 29 31 32 34

ÍNDICE GENERAL

Práctica 7 . . . . . . Práctica 8 . . . . . . Autenticación . . . Práctica 9 . . . . . . Manejo de sesiones Práctica 10 . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

34 34 34 37 37 38

Próximos pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Introducción Es importante que antes de comenzar a leer este libro, comprendas dos cosas fundamentales acerca del mismo: • Este libro no pretende ser una extensa guía de referencia que profundice en cada uno de los aspectos de Laravel. Su objetivo es el de mostrarte los aspectos más importantes de Laravel y enseñarte paso a paso y de forma práctica a desarrollar aplicaciones web. • El libro está en constante mejora y actualización. Toda contribución es bienvenida, ya sea en forma de corrección de errores, sugerencias sobre el contenido, difusión entre conocidos o redes sociales o cualquier otro tipo de colaboración que se te pueda ocurrir. Puedes hacerlo de forma sencilla escribiendo un mensaje directo en Twitter a @JonVadillo.

Prerequisitos Para seguir esta guía únicamente necesitarás conocimientos básicos/medios de PHP y motivación para aprender. Si todavía no dispones de estos conocimientos, puedes utilizar el material gratuito disponible en http://jonvadillo.com/learn para comenzar tu aprendizaje. Cualquier editor de texto te servirá también para programar. No obstante, te recomiendo PhpStorm de JetBrains, el cual considero sin duda alguna uno de los editores para PHP más potentes en la actualidad. ¡Comencemos!

¿Qué es Laravel? Tal y como dice la guía oficial, Laravel es un framework de desarrollo de aplicaciones web con una sintaxis elegante que nos permitirá desarrollar aplicaciones web de forma rápida y segura. El objetivo de Laravel es permitir a los desarrolladores crear aplicaciones web robustas y profesionales, de forma ágil y con una estructura adecuada. Laravel facilita la implentación de cualquier funcionalidad que toda aplicación profesional pueda necesitar (interacción con bases de datos, seguridad, servicios web, etc.). En este libro aprenderás a crear aplicaciones web con Laravel desde cero, desde lo más básico hasta funcionalidades más complejas que incluyan aspectos como la seguridad o control de acceso.

2

Introducción

Características principales Algunas de las características de Laravel son: • • • • •

Sistema intuitivo de rutas. Motor de plantillas Blade para la generación de interfaces de usuario de forma flexible. Soporte para cualquier base de datos mediante Eloquent ORM. Uso de la arquitectura MVC. Dispone de multitud de componentes capaces de resolver las problemáticas más comunes del desarrollo de aplicaciones web. • Una grande comunidad de desarrolladores y expertos.

Ecosistema Laravel Es importante conocer bien los actores principales del ecosistema Laravel: • Router: recibe todas las peticiones y las envía al controlador adecuado (también puede ejecutar algún middleware específico antes de llamar al controlador). • Controladores (Controllers): contienen toda la lógica para reaccionar a las peticiones entrantes. • Vistas (Views): contienen el código HTML y separan la presentación de la lógica de la aplicación (controlador). • Modelos (Models): se utilizan para interactuar con la base de datos y aplicar la lógica de negocio.

Laravel diagram

Introducción

3

Tal y como muestra la imagen anterior, el flujo de una petición en una aplicación de Laravel sería el siguiente: 1. El punto de entrada de todas las peticiones es el archivo public/index.php el cual se encargará de lanzar una instancia de nuestra aplicación Laravel. 2. La petición se envía al router, el cual la reenvía al controlador correspondiente. 3. El controlador atiende la petición y realiza las acciones correspondientes (por ejemplo, puede interactuar con la base de datos para cargar o almacenar información). 4. Por último, el controlador genera la vista correspondiente y se la envía al cliente.

Preparar el entorno de desarrollo Puedes lanzar una aplicación desarrollada con Laravel en cualquier máquina o servidor con Apache¹/Nginx, PHP² y Composer³. Para facilitar la creación del entorno de desarrollo, utilizaremos Laravel Homestead⁴. Homestead es una Vagrant box que provee de un entorno de desarrollo con todo el software necesario: PHP, servidor web, base de datos, gestor de dependencias, etc. No obstante, si te sientes más cómodo utilizando tu propio servidor o entorno de desarrollo, puedes hacerlo perfectamente siempre que cumplas con los requerimientos citados. En esta sección veremos paso a paso como preparar nuestro entorno de desarrollo con Homestead. 1. Instalar VirtualBox 6.x Descarga VirtualBox desde la página web oficial www.virtualbox.org⁵ e instálalo en tu ordenador. También puedes utilizar VMWare, Parallels o Hyper-V en lugar de Virtual Box. 2. Instalar Vagrant. Descarga e instala Vagrant tal y como lo indica la documentación de la página web oficial https://www.vagrantup.com⁶. 3. Añadir laravel/homestead box a tu instalación de Vagrant Una Vagrant box es una imagen base utilizada para clonar de forma rápida y sencilla una máquina virtual. Ejecuta el siguiente comando para descargar e instalar la Vagrant box the Larabel y así poder utilizarla para crear tantos entornos como quieras. 1

vagrant box add laravel/homestead

Puedes comprobar que se ha añadido correctamente utilizando el comando vagrant box list. 4. Instalar Homestead Clona el repositorio oficial de Homestead en un directorio. Como recomendación, puedes clonarlo en una carpeta llamada Homestead en la raíz de tu sistema, y utilizar esta máquina virtual para todos tus proyectos de Laravel. ¹https://httpd.apache.org/ ²https://www.php.net/ ³https://getcomposer.org/ ⁴https://github.com/laravel/homestead ⁵https://www.virtualbox.org/ ⁶(https://www.vagrantup.com/downloads.html)

Preparar el entorno de desarrollo 1

5

git clone https://github.com/laravel/homestead.git ~/Homestead

5. Crea el archivo de configuración Homestead.yaml Ejecuta el comando init.sh en un terminal dentro del directorio donde clonaste Homestead. Este comando creará el archivo de configuración Homestead.yaml. 1 2

// Mac / Linux... bash init.sh

3 4 5

// Windows... init.bat

El archivo Homestead.yaml creado tendrá el siguiente aspecto: 1 2 3 4

ip: "192.168.10.10" memory: 2048 cpus: 2 provider: virtualbox

5 6

authorize: ~/.ssh/id_rsa.pub

7 8 9

keys: - ~/.ssh/id_rsa

10 11 12 13

folders: - map: ~/code to: /home/vagrant/code

14 15 16 17

sites: - map: homestead.test to: /home/vagrant/code/public

18 19 20

databases: - homestead

6. Genera las claves ssh Si no dispones de unas clasves ssh en el sistema necesitarás generarlas desde un terminal. Para saber si ya dispones de ellas, intanta encontrar el directorio .ssh en tu sistema operativo (normalmente suele encontrarse en C:UsersUSER_NAME en Windows y el el directorio raíz ∼ en Linux/Mac ) y busca dos archivos llamados id_rsa y id_rsa.pub. Si los has encontrado, puedes saltarte este paso. En caso contrario, lanza el siguiente comando desde la consola:

Preparar el entorno de desarrollo 1

6

ssh-keygen -t rsa -C "[email protected]"

El script te realizará algunas preguntas, simplemente pulsa ENTER y te creará los archivos id_rsa y id_rsa.pub en un directorio con nombre .ssh. 7. Configurar Homestead En esta instalación no tendrás que tocar el archivo Vagrantfile (probablemente estés familiarizado con él ya que es típicamente el utilizado para configurar el entorno). Homestead delega la configuración en el archivo Homestead.yaml, por lo que a continuación te mostraremos las opciones más importantes que tendrás que configurar: • ssh keys: el fichero de configuración Homestead.yaml tendrá la configuración realizada correctamente tanto para Mac como Linux. Si estás utilizando Windows, modifica los siguientes valores:

1

authorize: c:/Users/USER_NAME/.ssh/id_rsa.pub

2 3 4

keys: - c:/Users/USER_NAME/.ssh/id_rsa

• Shared folders: en este apartado se indican los directorios de la máquina local que se mantendrán sincronizados con la máquina virtual creada. Modifica el valor de ‘map’ y escribe la carpeta de tu proyecto (p.ej. /Users/USER_NAME/dev/my-project en Linux/Mac o c:/dev/my-project en Windows).

1 2 3

folders: - map: ~/code/project1 to: /home/vagrant/project1

4 5 6

- map: ~/code/project2 to: /home/vagrant/project2

• Sites: La propiedad sites permite mapear fácilmente un dominio con un directorio de nuestro entorno virtual. De este forma podremos utilizar el dominio indicado para acceder a nuestra aplicación desde el navegador:

Preparar el entorno de desarrollo 1 2 3 4 5

7

sites: - map: homestead.test to: /home/vagrant/project1/public - map: miapp.test to: /home/vagrant/project2/public

8. Configurar el archivo local hosts Es probable que vayas a utilizar el entorno virtual creado para múltiples proyectos o aplicaciones, por lo que necesitarás añadir los dominios indicados en el anterior apartado de ‘sites’ al archivo hosts de tu ordenador. De esta forma puedes redirigir las peticiones a dominios concretos a aplicaciones de tu entorno virtual Homestead.

Modifica el archivo hosts (lo encontrarás en /etc/hosts en Mac/Linux y en C:\Windows\System32\drivers\etc\hos en Windows): 1 2

192.168.10.10 192.168.10.10

homestead.test miapp.test

Para evitar otro tipo de problemas, la recomendación general es utilizar dominios de tipo “.localhost”, “.invalid”, “.test”, or “.example”. 9. Arrancar y prueba el entorno creado Una vez ya tenemos Homestead configurado y el archivo hosts modificado, ya podemos ir al directorio Homestead y ejecutar el siguiente comando para arranchar la máquina virtual (la primera vez tardará más tiempo al tener que realizar la preparación del entorno): 1

vagrant up

Puedes acceder mediante SSH a tu máquina virtual: 1

vagrant ssh

¡Enhorabuena! Ya estás preparado para comenzar a crear tu primera aplicación web con Laravel. Puedes detener la máquina virtual con el comando vagrant halt.

Tu primera aplicación en 8 pasos Ahora que ya tenemos nuestro entorno de desarrollo preparado, crearemos una aplicación web con Laravel paso por paso. Al finalizar los 8 pasos que encontrarás en este capítulo, obtendremos como resultado una revista online a la que hemos llamado RevistApp. Esta aplicación mostrará los artículos de una revista almacenados en una base de datos. ¿Comenzamos ya?

Paso 1 - Crea tu primer proyecto Accede a tu máquina virtual utilizando el comando vagrant ssh y ejecuta el siguiente comando para crear un nuevo proyecto: 1

composer create-project --prefer-dist laravel/laravel revistapp

Si recibes un error, probablemente sea porque todavía no tienes Composer instalado en tu máquina virtual. Para ello, ejecuta el siguiente comando: 1

composer global require laravel/installer

Una vez instalado vuelve a ejecutar el comando create-project de Composer. Este comando inicializará un nuevo proyecto creado en el directorio revistapp. Puedes acceder a la aplicación entrando a http://homestead.test (o el dominio que hayas indicado en la configuración) desde tu navegador favorito. De forma alternativa también puedes utilizar el comando laravel new que también creará un nuevo proyecto de Laravel en la carpeta especificada: 1

laravel new revistapp

Puedes entrar a ver los archivos que se han creado en la nueva carpeta del proyecto. A partir de ahora siempre trabajaremos dentro de este directorio.

Paso 2 - Configura el proyecto Generar la clave de la aplicación (Application Key) Laravel utiliza una clave para securizar tu aplicación. La clave de aplicación es un string de 32 caracteres utilizado para encriptar datos como la sesión de usuario. Cuando se instala Laravel utilizando Composer o el instalador de Laravel, la clave se genera automáticamente, por lo que no es necesario hacer nada. Comprueba que existe un valor para APP_KEY en el fichero de configuración .env. En caso de no tener una clave generada, créala utilizando el siguiente comando:

Tu primera aplicación en 8 pasos 1

9

php artisan key:generate

Establecer los permisos de directorio Homestead realiza este paso por nosotros, por lo que si estás utilizando Homestead los permisos deberían estar correctamente establecidos. Si no estás utilizando Homestead o quieres desplegar tu aplicación en un servidor, no olvides establecer permisos de escritura para el servidor web en los directorios storage y bootstrap/cache.

Paso 3 - Crear un Router Cada vez que un usuario hace una petición a una de las rutas de la aplicación, Laravel trata la petición mediante un Router definido en el directorio routes, el cual será el encargado de direccionar la petición a un Controlador. Las rutas accesibles para navegadores estarán definidas en el archivo routes/web.php y aquellas accesibles para servicios web (webservices) estarán definidas en el archivo routes/api.php. A continuación se muestra un ejemplo: 1 2 3

Route::get('/articulos', function () { return '¡Vamos a leer unos articulos!'; });

El código anterior muestra cómo se define una ruta básica. En este caso, cuando el usuario realice una petición sobre /articulos, nuestra aplicación enviará una respuesta al usuario con el string ‘¡Vamos a leer unos articulos!’. Aparte de ejecutar las acciones definidas para cada ruta, Laravel ejecutará el middlewere específico en función del Router utilizado (por ejemplo, el middlewere relacionado con las peticiones web proveerá de funcionalidades como el estado de la sesión o la protección CSRF⁷. Ver las rutas creadas Artisan incluye un comando para mostrar todas las rutas de una aplicación de forma rápida. Basta con ejecutar el siguiente comando en la consola: 1

php artisan route:list

Devolver un JSON También es posible devolver un JSON. Laravel convertirá automáticamente cualquier array a JSON: ⁷https://es.wikipedia.org/wiki/Cross-site_request_forgery

Tu primera aplicación en 8 pasos 1 2 3

10

Route::get('/articulos', function () { return ['foo' => 'bar']; });

Parámetros en la ruta Una URL puede contener información de nuestro interés. Laravel permite acceder a esta información de forma sencilla utilizando los parámetros de ruta: 1 2 3

Route::get('articulos/{id}', function ($id) { return 'Vas a leer el artículo: '.$id; });

Los parámetros de ruta vienen definidos entre llaves {} y se inyectan automáticamente en las callbacks. Es posible utilizar más de un parámetro de ruta: 1 2 3

Route::get('articulos/{id}/user/{name}', function ($id, $name) { // Tu código aquí. });

Acceder a la información de la petición También es posible acceder a la información enviada en la petición. Por ejemplo, el siguiente código devolverá el valor enviado para el parámetro ‘fecha’ de la URL /articulos?fecha=hoy: 1 2 3 4

Route::get('/articulos', function () { $date = request('fecha'); return $date; });

Paso 4 - Crear una vista Definiendo una vista sencilla Las vistas contienen el HTML que sirve nuestra aplicación a los usuarios. Se almacenan en el directorio resources/views de nuestro proyecto.

Tu primera aplicación en 8 pasos 1 2 3 4 5 6

11



Vamos a leer al escritor {{ $nombre }} Estos son sus últimos artículos:

    @foreach ($articulos as $articulo)
  • {{ $articulo }}
  • @endforeach


Para que la vista pueda acceder a los datos, es necesario proporcionárselos en la llamada al método view(): 1 2 3 4 5 6 7

Route::get('/articulos', function () { $articulos = array('Primero', 'Segundo','Tercero', 'Último'); return view('articulos', [ 'nombre' => 'Ane Aranceta', 'articulos' => $articulos ]); });

Los datos se le pasarán como un array de tipo clave-valor. El motor de plantillas Blade permite el uso de todo tipo de estructuras: 1 2 3

@for ($i = 0; $i < 10; $i++) El valor actual es {{ $i }} @endfor

4 5 6 7

@foreach ($users as $user)

El usuario: {{ $user->id }}

@endforeach

8 9 10 11 12 13

@forelse($users as $user)
  • {{ $user->name }}
  • @empty

    No users

    @endforelse

    14 15

    @while (true)

    Tu primera aplicación en 8 pasos 16 17

    13

    Eso es un bucle infinito.

    @endwhile

    18 19 20 21 22 23 24 25

    @if (count($articulos) === 1) Hay un artículo. @elseif (count($articulos) > 1) Hay varios artículos. @else No hay ninguno. @endif

    26 27 28 29

    @unless (Auth::check()) No estas autenticado. @endunless

    Puedes encontrar toda la información acerca de Blade en la documentación oficial⁹.

    Paso 5 - Crear un Controlador Los controladores contienen la lógica para atender las peticiones recibidas. En otras palabras, un Controlador es una clase que agrupa el comportamiento de todas las peticiones relacionadas con una misma entidad. Por ejemplo, el ArticuloController será el encargado de definir el comportamiento de acciones como: creación de un artículo, modificación de un artóculo, búsqueda de artículos, etc. Creando un Controller Existen dos formas de crear un controlador: • Crear manualmente una clase que extienda de la clase Controller de Laravel dentro del directorio app/Http/Controllers. • Utilizar el comando de Artisan make:controller. Artisan es una herramienta que nos provee Laravel para interactuar con la aplicación y ejecutar instrucciones. En este caso escogeremos la segunda opción y ejecutaremos el siguiente comando: 1

    php artisan make:controller ArticuloController

    De este modo Laravel creará automáticamente el controlador:. ⁹https://laravel.com/docs/6.x/blade

    Tu primera aplicación en 8 pasos 1

    14