Pokedex: Actualizar Laravel de la versión 8.x a la 9.x
Tags: laravel, php, webdev, javascript
Published: 2022-09-05 21:21:03

Hace un año estuve realizando algunas publicaciones, las cuales hacen referencia a Laravel, en dichas publicaciones construimos un "Pokedex" desde 0.

Estas publicaciones se pueden consultar en el siguiente enlace:

[Pokedex con Laravel](https://chris-lopez.medium.com/the-pokedex-project-creando-un-pokedex-con-laravel-1-481a1df3b92a)

Ahora que ha pasado este periodo de tiempo, me propuse a actualizar el proyecto, el cual contaba con la versión de **Laravel 8.x**, por tal motivo, el requerimiento principal, será actualizar a la versión mas reciente. 
De igual forma, estarémos actualizando a la versión 8.1 de PHP. 

> Cuando se escribió este articulo, la versión mas actual de Laravel es la 9.27 con versión mínima de PHP, que es la 8.0.

## Prerrequisitos

Para poder hacer esta actualización se debe tener instalado lo siguiente:

- PHP 8.1
- Ubuntu 20.04 o WSL2 en Windows
- Composer
- Git

## Primeros pasos

Antes de continuar, les recomiendo que sigan la guía de instalación que tiene Laravel para cuando liberan las versiones, en este caso fue de 8 a 9, les dejo el link:

[Upgrade Guide Laravel From 8.x to 9.x](https://laravel.com/docs/9.x/upgrade)

Si actualmente no usas tantos paquetes, en esa guía simplemente van a llegar al paso que dice **"Upgrade Dependencies"**, en caso contrario, les recomiendo una auditoría exhaustiva con los paquetes que usan y revisar los repositorios de los mismos, para ver si tienen versiones para Laravel 9 en este caso.

## Instalación

Siguiendo estas recomendaciones; el **"Pokedex"** no usa paquetes externos, es un proyecto sencillo que nos da una inducción a Laravel, por lo cual vamos a codificar, y lo primero que vamos realizar es la modificación del archivo **"composer.json"**.

Sustituimos con lo siguiente en la sección de **"require"** del archivo:

```
"require": {
        "php": "^8.0||^8.1",
        "fruitcake/laravel-cors": "^v2.0.5",
        "guzzlehttp/guzzle": "^7.5.0",
        "laravel/framework": "^v9.27.0",
        "laravel/tinker": "^v2.7.2",
        "laravel/ui": "^3.3"
    },

```
Si ponemos atención a la diferencia, solamente actualizamos versiones y quitamos un paquete llamado **"fideloper/proxy"**, mas adelante sabremos porqué eliminamos esta librería.

Ahora modificamos la sección de "require-dev":

```
"require-dev": {
        "spatie/laravel-ignition": "^1.4.0",
        "fakerphp/faker": "^1.9.1",
        "laravel/sail": "^1.0.1",
        "mockery/mockery": "^1.4.4",
        "nunomaduro/collision": "^v6.2.1",
        "phpunit/phpunit": "^9.5.24"
    },

```
En esta parte, actualizamos versiones y sustituimos el paquete **"facade/ignition"** por **"spatie/laravel-ignition"**.

Una vez modificado el archivo **"composer.json"** borramos el archivo **"composer.lock"**, ya que está ligado a la versión 8 y nos puede arrojar errores en la instalación si lo dejamos así.

Después de borrar el archivo "composer.lock" ejecutamos el siguiente comando: 

```
composer install
```

Instalamos las dependencias de Javascript:

```
npm install
```
Copiamos el archivo de configuración de Laravel:

```
cp .env.example .env
```

Probamos que sirva la configuración:

```
php artisan key:generate
```

## Test en browser de la instalación

Aunque de cierta manera nos sirva el comando "artisan" después de configurar la versión de Laravel, tendremos que probar que todo nuestro Pokedex se ejecute sin errores en el browser.

Para esto utilizaremos "Laravel Sail", la configuración como tal no la mencionaré aquí, ya que previamente en las publicaciones del "Pokedex" se mostro como se configura; solamente configuraremos el servicio de MariaDb.

Pueden encontrar la publicación de Pokedex con Sail aquí:

[The Pokedex Project — Desplegando nuestro ambiente de desarrollo con Laravel Sail(2)](https://chris-lopez.medium.com/the-pokedex-project-desplegando-nuestro-ambiente-de-desarrollo-con-laravel-sail-2-11d5445a8c23)

Una vez configurado, levantamos los servicios de Sail:

```
sail up -d
```

> En este caso, se uso un alias para ejecutar el comando de Sail, recordemos que se encuentra en vendor/bin

Probamos que los servicios se hayan levantado correctamente:

```
sail ps
```

Ya con los servicios levantados, abrimos nuestro browser y ponemos el localhost que nos indica el comando anterior y nos arrojará un error:


![Error: Paquete Fideloper Proxy](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ibqatw8ojfwkpn6st459.png)

Para la versión 9, dejaron de usar **"fideloper/proxy"** y usaron una librería que ya viene en el core de Laravel, la cual se encuentra en **"Illuminate/Http/Middleware/TrustProxies"**.

Entonces, para que ya no arroje dicho error, modificaremos el archivo **TrustProxies.php**, el cual se encuentra en la carpeta de Middleware con lo siguiente:

```
<?php

namespace App\Http\Middleware;

use Illuminate\Http\Middleware\TrustProxies as Middleware;

```
Realizando estos cambios, probamos de nuevo en nuestro browser y tendremos el **"Pokedex"** con la versión mas reciente de Laravel:

![Pokedex con Laravel](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r32bfpig6uj7nswry7dy.png)

Los cambios que se realizaron en esta publicación, los puedes encontrar en el siguiente PR:

[https://github.com/krsrk/pokedex-laravel/pull/3](https://github.com/krsrk/pokedex-laravel/pull/3)