Tras más de una década desde la introducción del popularísimo framework Laravel, ¿te has preguntado alguna vez: «¿Qué más puede ofrecer Laravel a los desarrolladores de PHP?»

Teniendo en cuenta lo mucho que ha simplificado el desarrollo PHP tanto para principiantes como para desarrolladores profesionales, algunos podrían incluso afirmar que ha malcriado a los desarrolladores haciéndoles creer que PHP es el lenguaje de programación más fácil que existe.

Entonces, ¿tiene Laravel aún más sorpresas reservadas para los desarrolladores de Laravel? ¿O ha agotado todos los medios posibles para ayudar a los desarrolladores de PHP?

Bueno, al menos, sabemos que Laravel 10 tiene mucho que ofrecer. Esto es lo que vamos a descubrir en este artículo mientras te llevamos en un viaje a través de las nuevas características de Laravel 10, correcciones y métodos y paquetes que acaban de quedarse obsoletos.

Calendario de Lanzamientos de Laravel

El core team de Laravel solía lanzar dos versiones principales al año (una cada seis meses).

Sin embargo, el ciclo de publicación cambió cuando Taylor Otwell, creador de Laravel, anunció que ahora se publicaría una única versión principal al año. Esto permitió al core team y a la comunidad dedicar más tiempo y esfuerzo a una versión concreta del framework e introducir nuevas y potentes funciones sin realizar cambios de última hora.

El lanzamiento de Laravel 10 estaba previsto para el 7 de febrero de 2023, tras el lanzamiento de Laravel 9 el 8 de febrero de 2022. Sin embargo, el equipo necesitó más tiempo para finalizar su obra de arte, y Laravel 10 se publicó finalmente el 14 de febrero de 2023.

Ahora se espera que Laravel 11 se lance en en la primera quincena de febrero de 2024.

Además, según la política de soporte, se ofrecen correcciones de errores durante 18 meses y actualizaciones de seguridad durante dos años para todas las versiones de Laravel.

A continuación se indica el calendario previsto de correcciones de errores y actualizaciones de seguridad:

  • Laravel 9 seguirá recibiendo correcciones de errores hasta el 8 de agosto de 2023 y correcciones de seguridad hasta el 6 de febrero de 2024.
  • Laravel 10 recibirá correcciones de errores hasta el 6 de agosto de 2024 y correcciones de seguridad hasta el 4 de febrero de 2025.
  • Se espera que Laravel 11 reciba correcciones de errores hasta el 5 de agosto de 2025 y correcciones de seguridad hasta el 3 de febrero de 2026.

¿Deberías Actualizar a Laravel 10?

Es importante recordar que no siempre es necesario actualizar la versión de Laravel de nuestra aplicación a la última versión en cuanto sale una nueva versión.

Laravel es un framework de código abierto, lo que implica que cada vez que instalamos una nueva instancia de Laravel en nuestra máquina, somos propietarios del código base del framework. Esto significa que aunque la versión del framework que utiliza nuestra aplicación ya no esté soportada, la aplicación seguirá funcionando; sólo tendremos que mantenerla nosotros mismos.

Como resultado, se suele sugerir que se dé prioridad a la estabilidad de las aplicaciones antes que a las actualizaciones del framework.

En resumen, deberías plantearte actualizar a Laravel 10 cuando:

  • La aplicación es estable con su versión actual y funciona sin problemas.
  • La nueva versión añade una característica que tu aplicación necesita o soluciona un problema que tu aplicación está experimentando.
  • La aplicación se probará a fondo antes de que los cambios de la actualización se pasen a producción.

Actualizaciones de Laravel 10

El logotipo de Laravel 10 con la palabra "Laravel" en naranja brillante y el "10" en gris.
Laravel 10.

Kinsta es un gran fan de Laravel. Por eso hemos reunido los aspectos más destacados de Laravel 10 en un único artículo para que te sirva de referencia y guía para utilizar todas las novedades. Por lo tanto, te recomendamos marcar esta página y volver a visitarla de vez en cuando.

Nuevas Funciones y Actualizaciones de Laravel 10

No hay duda de que la parte más emocionante de cualquier nueva versión es la incorporación de nuevas funciones. Así que sin más preámbulos, empecemos echando un vistazo a las nuevas características y actualizaciones de Laravel 10.

1. PHP 8.1: En el Corazón de Laravel 10

PHP 8.1 es la versión PHP mínima requerida en Laravel 10. Algunas características de PHP 8.1, como las propiedades readonly y array_is_list, se utilizan en Laravel 10.

2. Soporte para PHP 8.2

PHP 8.2 fue lanzado el 8 de diciembre de 2022, sólo dos meses antes de la fecha de lanzamiento de Laravel 10. Sin embargo, esto no debería impedirte utilizar las características de PHP 8.2, ya que sin hacer nada extra, Laravel 10 está preparado para PHP 8.2.

De hecho, todo el ecosistema Laravel, incluyendo Forge, Vapor y Envoyer, es compatible con PHP 8.2, e incluso puedes utilizar PHP 8.2 con Laravel 9. ¿No es genial?

3. Actualización de los Paquetes Oficiales de Laravel

No sólo el framework se mantiene profesionalmente y se actualiza con regularidad, sino también todos los paquetes oficiales y el ecosistema.

La siguiente es una lista de los paquetes oficiales de Laravel más recientes que se han actualizado para dar soporte a Laravel 10:

  1. Breeze
  2. Cashier Stripe
  3. Dusk
  4. Horizon
  5. Installer
  6. Jetstream
  7. Passport
  8. Pint
  9. Sail
  10. Scout
  11. Valet

Otro regalo para los fans de Rails, Vue, React y Svelte, Inertiajs 1.0.1 también es compatible con Laravel 10.

4. Actualización de la Versión de Predis

Predis es un robusto cliente Redis para PHP que puede ayudarte a sacar el máximo partido del almacenamiento en caché para ofrecer una fantástica experiencia de usuario. Anteriormente Laravel soportaba las versiones 1 y 2, pero a partir de Laravel 10, el framework ya no soporta Predis 1.

Aunque la documentación de Laravel menciona Predis como el paquete para interactuar con Redis, también puedes utilizar la extensión oficial de PHP. Esta extensión proporciona una API para comunicarse con los servidores Redis.

5. Declaraciones Nativas de Tipos

Laravel solía utilizar DocBlocks en su esqueleto de código para aclarar qué hace un trozo de código y qué tipo de parámetros o respuestas esperar. Sin embargo, gracias a las declaraciones nativas de tipos en Laravel 10, esto cambiará.

La mejor forma de explicar este cambio es con un ejemplo sencillo. En lugar de que una función tenga este aspecto:

/**
* Determine whether the user can create models.
*
* @param {{ namespacedUserModel }} $user
* @return IlluminateAuthAccessResponse|bool
*/

public function create({{ user }} $user)
{
  //
}

…tendrá este aspecto:

/**
* Determine whether the user can create models.
*/

public function create({{ user }} $user): bool
{
  //
}

Este cambio es puramente en beneficio de la experiencia del desarrollador, ya que los IDE conocerán la forma del parámetro y la respuesta esperados. Proporcionará una mayor claridad de los tipos cuando no sea posible mediante los tipos nativos de PHP. Por lo tanto, ayudará a los editores de código a funcionar mejor con las funciones de autocompletar.

6. Todas las Reglas de Validación Invocables por Defecto

Si quisieras hacer una regla de validación invocable en Laravel 9, tendrías que añadir una bandera --invokable después del comando Artisan. Esto ya no es necesario porque todas las reglas de Laravel 10 son invocables por defecto. Por lo tanto, puedes ejecutar el siguiente comando para crear una nueva regla invocable en Laravel 10:

php artisan make:rule CustomRule

7. Soporte Nativo de Modificación de Columnas

En un intento de eliminar la necesidad del paquete DBAL (doctrine/dbal) cuando se utiliza change() para modificar columnas, se ha introducido una nueva característica en Laravel 10 que permite a los desarrolladores utilizar el método change() y modificar columnas con MySQL, PostgreSQL y SQL Server sin necesidad de paquetes adicionales. Se trata de un cambio importante y arriesgado, pero creemos que merece la pena, ya que eliminará la dependencia de un paquete adicional.

Para comprender mejor la nueva función, consulta el siguiente ejemplo:

$table->integer('user_balance')->unsigned()->default(0)->comment('balance'); // `user_balance` is an integer, unsigned, defaults to '0', and column comment is 'balance'

Ahora, supongamos que tenemos una columna para user_balance y queremos cambiar su tipo. A partir de Laravel 10, podemos hacer simplemente esto:

$table->bigInteger('user_balance')->change(); // This will change `user_balance` to bigInteger instead of just integer

El código anterior cambiará con éxito el tipo de la columna, pero también eliminará los atributos UNSIGNED, DEFAULT y COMMENT. Por lo tanto, es importante que recuerdes añadir todos los atributos cuando vayas a cambiar el tipo de una columna:

$table->bigInteger('user_balance')->unsigned()->default(0)->comment('balance')->change();

En el caso de que tengas varias conexiones a bases de datos y ya hayas instalado DBAL, se recomienda llamar al método Schema::useNativeSchemaOperationsIfPossible() dentro del método de arranque en AppProvidersAppServiceProvider para poder utilizar operaciones de esquema nativas y utilizar operaciones nativas antes de depender del paquete (SQLite, por ejemplo, aún no lo admite):

use IlluminateSupportFacadesSchema;
class AppServiceProvider extends ServiceProvider
{
  public function boot()
  {
    Schema::useNativeSchemaOperationsIfPossible();
  }
}

8. Recuperación Nativa de Tipo de Columna

Otra característica destacable de Laravel 10 es la posibilidad de utilizar el método Schema::getColumnType sin tener que depender del paquete doctrine/dbal. Actualmente utilizamos Schema::getColumnType con DBAL para obtener el tipo de columna. DBAL mapea cada tipo de columna nativo a su equivalente de tipo DBAL, y no admite muchos de los tipos de columna utilizados por Laravel en varias bases de datos.

En Laravel 10, en cambio, el nuevo método Schema::getColumnType devolverá el tipo de columna real en lugar de su equivalente DBAL. También te permite escribir pruebas de integración para la nueva función nativa de modificación de columnas. Puedes utilizar esta función para obtener el nombre del tipo de datos o la definición completa del tipo de la columna especificada:

Schema::getColumnType('products', 'price'); // decimal

9. Algoritmo Hashing Más Rápido

xxHash es un algoritmo Hash increíblemente rápido. Presenta una gran aleatoriedad y dispersión de salida, así como unicidad para reducir las colisiones. Dado que PHP 8.1 proporciona soporte para xxh128, y dado que Laravel 10 se ejecuta sobre PHP 8.1, tener un algoritmo hash tan fiable dentro de Laravel 10 es ideal.

Vale la pena mencionar que Taylor destacó durante su revisión de este cambio que algunos paquetes de terceros pueden depender de que los nombres de archivo tengan el formato exacto del hash SHA-1, que es el algoritmo que Laravel solía utilizar para el hash. Por lo tanto, si estás planeando una actualización a Laravel 10, sería prudente comprobar esto dos veces en cualquier paquete de terceros que estés utilizando en tu aplicación.

10. whereExists() Soporte de Métodos para Eloquent Builder

Actualmente, el uso de whereExists() requiere configurar la consulta anidada mediante un cierre. Afortunadamente, con Laravel 10, ahora es posible incluir un Eloquent Builder como consulta anidada. Esto permite utilizar métodos personalizados del constructor, ámbitos del modelo, etc.

Por ejemplo, normalmente hacemos esto si queremos utilizar whereExists():

Order::whereExists(function ($query) {
  $query->from('products')->whereColumn('products.order_id', 'orders.id');
});

Con Laravel 10, podemos hacer esto en su lugar:

Order::whereExists(
  Product::whereColumn('products.order_id', 'orders.id')
);

11. Optimización de la Carga Eager

Una de las novedades interesantes de Laravel 10 es la optimización de la eager cuando no hay claves que cargar. Este cambio es más una corrección que una característica, ya que aborda un problema actual en el que las relaciones de carga eager provocan que se ejecuten un gran número de consultas imposibles.

Actualmente, cuando se realiza eager-loading de relaciones que no tienen claves que cargar, Laravel ejecutará una consulta similar a esta:

select * from `table_name` where 0 = 1

Sin embargo, la nueva actualización de Laravel 10 comprueba en primer lugar si hay alguna clave disponible y, si no la hay, proporciona una colección vacía, eliminando la necesidad de realizar consultas innecesarias a la base de datos.

12. $path Opcional para Métodos de Sistema de Archivos

En Laravel 10, el parámetro $path es opcional para los siguientes métodos:

  • FilesystemAdapter#putFile
  • FilesystemAdapter#putFileAs
  • UploadedFile#store
  • UploadedFile#storeAs
  • UploadedFile#storePublicly
  • UploadedFile#storePubliclyAs

Así que en lugar de hacer esto para almacenar un archivo subido en Amazon S3:

Storage::disk('s3')->putFile(‘post/images', $uploadedFile);

…podemos hacer esto:

Storage::disk(Disk::PostImages)->putFile($uploadedFile)

13. Expresiones de Bases de Datos y Formato Específico de la Gramática

Sólo cuatro días antes del lanzamiento de Laravel 10, el core team de Laravel decidió fusionar una excelente funcionalidad que resuelve un gran desafío cuando se trabaja con múltiples bases de datos.

En versiones anteriores, si trabajábamos con PostgreSQL y MySQL y queríamos devolver el primer valor de una lista como un alias, teníamos que escribir código de base de datos sin procesar y hacer lo siguiente:

DB::table(‘visitors')
->when(isPostgreSQL(), fn ($query) => $query->select(DB::raw('coalesce(NULL, "user", "guest") AS "First Visitor"')))
->when(isMySQL(), fn ($query) => $query->select(DB::raw('coalesce(NULL, `user`, `guest`) AS `First Visitor`')))

En el código anterior, estamos utilizando la funciónCOALESCE() para devolver el primer valor no nulo como un alias llamado primer visitante. Así, cada vez que necesitáramos realizar una operación como ésta, tendríamos que volver a escribir código de base de datos sin procesar.

La nueva función nos permite crear clases de expresión reutilizables que implementen las expresiones y sentencias raw que necesitamos para nuestras consultas una sola vez. Esto eliminará la necesidad de escribir código de base de datos sin procesar cuando queramos utilizar más funcionalidades de la base de datos.

Volviendo al ejemplo anterior, sigamos el nuevo enfoque de Laravel 10 para conseguir el mismo resultado pero sin utilizar sintaxis de código de base de datos sin procesar.

En primer lugar, tendríamos que crear dos clases: una para el aliasing y otra para utilizar la función COALESCE():

class Alias implements Expression
{
  public function __construct(
    public readonly Expression|string $expression,
    public readonly string $name,
  ) { }
  public function getValue(Grammar $grammar): string
  {
    return match ($grammar->isExpression($this->expression)) {
      true => "{$grammar->getValue($this->expression)} as {$grammar->wrap($this->name)}",
      false => $grammar->wrap("{$this->name} as {$this->name}"),
    };
  }
}
class Coalesce implements Expression
{
  public function __construct(
    public readonly array $expressions,
  ) { }
  public function getValue(Grammar $grammar): string
  {
    $expressions = array_map(function ($expression) use($grammar): string {
      return match ($grammar->isExpression($expression)) {
        true => $grammar->getValue($expression),
        false => $grammar->wrap($expression),
      };
    }, $this->expressions);
    $expressions = implode(', ', $expressions);
    return "coalesce({$expressions})";
  }
}

Entonces, podemos hacer esto para conseguir el resultado deseado tanto para MySQL como para PostgreSQL:

DB::table('visitors') ->select(new Alias(new Coalesce([NULL, 'user', 'guest']), 'First Visitor'));

Podrías pensar que escribirlo es demasiado trabajo, pero sin duda merece la pena porque sólo tendrás que escribirlo una vez y te evitará la molestia de cambiar de sintaxis cuando trates con varias bases de datos.

Además, según el creador del pull request, Tobias Petry, este cambio abrirá la puerta a numerosas posibilidades para que los paquetes te proporcionen las clases de expresiones brutas más comunes. Incluso afirmó que lo proporcionará a la comunidad en un paquete dedicado tras el lanzamiento de Laravel 10.

14. Actualización de SQL Server para Utilizar FETCH y OFFSET en Queries que No incluyan un orderBy

Cuando utilizamos orderBy en una query como ésta:

$builder->select('*')->from('users')->skip(11)->take(10)->orderBy('email', 'desc');

Laravel produce entonces una sentencia SQL que utiliza FETCH y OFFSET:

select * from [users] order by [email] desc offset 11 rows fetch next 10 rows only

Sin embargo, en versiones anteriores de Laravel, si eliminamos orderBy de la query, se vuelve al antiguo método de compensar los resultados:

$builder->select('*')->from('users')->skip(11)->take(10);
select * from (select *, row_number() over (order by (select 0)) as row_num from [users]) as temp_table where row_num between 11 and 20 order by row_num

Pero ahora en Laravel 10, esta nueva actualización permitirá a tu aplicación Laravel 10 utilizar FETCH y OFFSET incluso cuando orderBy no esté presente:

select * from [users] order by (SELECT 0) offset 10 rows fetch next 10 rows only

Esta actualización mejora la velocidad en un 33% y requiere menos pasos de ejecución.

15. Soporte de PHPUnit 10

Laravel 10 soporta PHPUnit 10. Es un framework de pruebas unitarias para PHP y la versión 10 fue lanzada el 3 de febrero de 2023. Laravel 10 seguirá teniendo soporte para PHPUnit 9 y 8.

16. Mejoras de Seguridad para la Clase Timebox

Laravel 10 incluye mejoras de seguridad para la clase Timebox, cuyo objetivo es proteger la aplicación contra ataques de temporización. La Clase Timebox se implementa dentro del método hasValidCredentials.

La clase Timebox tiene ahora soporte para manejar las excepciones lanzadas durante la ejecución de una llamada de retorno de Timebox.

17. dispatch() El Comportamiento de los Métodos es el Mismo en Laravel 10

El método dispatch() dentro del rasgo DispatchesJobs ahora comprueba los trabajos únicos igual que la función de ayuda global dispatch(). Esto hace que los métodos dispatch() adopten las mismas funcionalidades en todo Laravel 10.

18. Laravel Pennant

Si alguna vez has trabajado en una aplicación web que se actualiza constantemente con nuevas características, entenderás lo vitales que son las banderas de características. Sin embargo, la preservación de las banderas de características necesitaría una cantidad significativa de trabajo para hacerlo bien, pero no te preocupes, Laravel te lo permite con el nuevo paquete Laravel Pennant.

Laravel Pennant proporciona una solución fácil de usar para mantener las banderas de características. Incluso incluye un controlador de matrices en memoria y una base de datos.

Puedes definir fácilmente una nueva característica:

use LaravelPennantFeature;
use IlluminateSupportLottery;
Feature::define('new-color-button', function () {
return Lottery::odds(1, 10);
});

Así podrás comprobar si el usuario tiene acceso a esta función o no:

use LaravelPennantFeature;
if (Feature::active('new-color-button')) {
  // ...
}

Incluso tiene un aspecto más bonito en Laravel Blade:

@feature('new-color-button')
// Kinsta Rules!!
@endfeature

19. Interacción de Procesos Laravel

La nueva Interacción de Procesos de Laravel 10 hace que probar y ejecutar procesos CLI sea pan comido. Ofrece una API sencilla para aliviar la carga de las pruebas. Tomemos el ejemplo del original PR de la función por Taylor:

use IlluminateSupportFacadesProcess;
$result = Process::run('ls -la');
$result->successful();
$result->failed();
$result->exitCode();
$result->output();
$result->errorOutput();
$result->throw();
$result->throwIf(condition);

Probablemente te habrás dado cuenta de lo sencillo y limpio que es el código anterior. Pasando a los procesos de construcción, las cosas sólo mejoran:

$result = Process::timeout(60)->path(base_path())->env([...])->run('ls -la');
$result = Process::forever()->run('ls -la');

Ahora, para utilizar esta nueva función en las pruebas, puedes crear un proceso nuevo y ficticio como éste:

Process::fake([
  'ls *' => Process::result('Hello From Kinsta'),
]);

A continuación, puedes ejecutar el proceso ficticio y utilizar las nuevas aserciones disponibles:

$result = Process::run('ls -la');
Process::assertRan(function ($process, $result) {
  return $process->command == 'ls -la';
});
Process::assertRanTimes(function ($process, $result) {
  return $process->command == 'ls -la';
}, times: 1);
Process::assertNotRan(function ($process, $result) {
  return $process->command == 'cat foo';
});

20. Pest Scaffolding

Ahora, las pruebas Pest scaffolding están habilitadas por defecto al crear nuevos proyectos Laravel. Para habilitar esta característica, utiliza la bandera --pest al crear una nueva aplicación con el instalador de Laravel:

laravel new example-kinsta-app --pest

21. Función String Password Helper

Laravel 10 puede crear una contraseña aleatoria y segura con una longitud determinada:

$password = Str::password(12);

Métodos y Paquetes Obsoletos en Laravel 10

A continuación veremos los paquetes y métodos que han sido eliminados con el lanzamiento de Laravel 10.

Laravel 10 Dice Adiós a PHP 8.0

El framework Laravel deja de soportar PHP 8.0 en Laravel 10. Por lo tanto, si estás planeando actualizar tu aplicación a Laravel 10, primero debes actualizar la versión de PHP a PHP 8.1 o PHP 8.2.

Eliminación de Métodos Obsoletos

La documentación de Laravel se actualiza con todos los cambios y desaprobaciones importantes. Si vas a migrar un proyecto actual a Laravel 10, cualquier código que utilice un método obsoleto debe reescribirse con un nuevo enfoque para conseguir el mismo resultado.

Aquí tienes una lista de algunas de las desaprobaciones:

  • El método Route::home (obsoleto en Laravel 9)
  • Funciones y métodos en torno a dispatchNow, obsoleto para animar a los desarrolladores a utilizar dispatchSyncel único método compatible para el envío inmediato
  • El método getBaseQuery, que tiene un equivalente toBase
  • La clase MaintenanceModeException
  • El rasgo MocksApplicationServices
  • El método Mail::failures del falso correo
  • La propiedad $dates (utiliza $casts en su lugar)
  • El método assertTimesSent()
  • Soporte para Predis 1 y DBAL 2
  • Todas las depreciaciones relacionadas en doctrine/dbal desde que Laravel dejó de soportar la versión 2

Cómo Instalar Laravel 10

El core team de Laravel se aseguró de que todos los desarrolladores pudieran acceder fácilmente al framework en distintos entornos. Por lo tanto, hay varias formas de empezar a usar Laravel 10 en tu máquina, y eres totalmente libre de elegir la que mejor te funcione.

Instalar Laravel 10 en MacOS

Puedes empezar fácilmente con Laravel 10 en MacOS utilizando Docker y Laravel Sail. Puedes ejecutar el siguiente comando de terminal desde el directorio donde quieras instalar la aplicación, teniendo en cuenta que solo se permiten caracteres alfanuméricos, guiones y guiones bajos para el nombre de la app:

curl -s "https://laravel.build/example-kinsta-app" | bash

Una vez completado el proceso de instalación, dirígete al directorio del proyecto y utiliza Sail para ejecutar tu nuevo proyecto pulsando el siguiente comando en el terminal:

./vendor/bin/sail up

Sail utilizará su solución integrada para ejecutar tu proyecto Laravel utilizando Docker, y una vez terminado, tu aplicación estará lista en http://localhost.

Instalar Laravel 10 en Windows 10 y 11

Puedes utilizar Docker Desktop para instalar rápidamente Laravel 10 en Windows. Sin embargo, tanto si utilizas Windows 10 como 11, primero debes habilitar una de las dos opciones siguientes en tu máquina:

  • Subsistema Windows para Linux 2 (WSL2) es una característica del sistema operativo Windows que te permite ejecutar un sistema de archivos Linux y herramientas de línea de comandos Linux directamente en Windows.
  • Función Hyper-V Backend te permite crear y utilizar una versión de software de un ordenador conocida como máquina virtual.

En cuanto hayas cumplido todos los requisitos de Docker, puedes ejecutar el siguiente comando en tu terminal:

curl -s https://laravel.build/example-kinsta-app | bash

A continuación, utiliza Sail para ejecutar tu aplicación en http://localhost ejecutando el siguiente comando desde el directorio root de tu proyecto Laravel 10 recién instalado:

./vendor/bin/sail up

Por otro lado, muchos desarrolladores prefieren el SO Linux a otros sistemas operativos, ya que les permite trabajar de forma más eficiente y rápida. Con WSL, puedes disfrutar de la seguridad, el rendimiento y la compatibilidad con juegos de Ubuntu. Ubuntu es una distribución o versión de Linux muy conocida por su facilidad de uso.

Se recomienda que utilices Visual Studio Code e instales la extensión WSL oficial  de Microsoft para poder abrir cualquier carpeta del Subsistema de Windows para Linux, y aprovechar todo el conjunto de funciones de vscode. Además, la extensión Remote Development es otra opción a la que se hace referencia en la documentación de Laravel.

Instalar Laravel 10 con Composer

Tanto si usas macOS como Windows, Composer puede ayudarte a empezar a trabajar con Laravel 10 en un abrir y cerrar de ojos.

Primero tendrás que asegurarte de que tienes PHP ≤ 8.1, node, npm y Composer instalados en tu máquina.

Una vez lo hagas, puedes instalar Laravel Installer globalmente y utilizarlo para instalar tu nueva aplicación Laravel 10:

composer global require laravel/installer
laravel new example-kinsta-app

O bien, puedes crear una nueva aplicación Laravel 10 directamente utilizando sólo Composer:

composer create-project laravel/laravel example-kinsta-app

Cómo Instalar Laravel 11

Aún falta un año para el lanzamiento de Laravel 11. Sin embargo, Laravel 11 ya está disponible para que pruebes sus características. No sólo está disponible, sino que también incluye algunos PR fusionados en GitHub, como la eliminación de la compatibilidad con PHP 8.1.

La bandera --dev en el Instalador de Laravel instala la rama maestra del repositorio laravel/laravel, y ahora que Laravel 10 está disponible, Laravel 11 estará disponible en la rama maestra. Si utilizas Laravel Installer, todo lo que tendrás que hacer es ejecutar este comando en tu terminal:

laravel new example-kinsta-app --dev

O, si prefieres usar Composer:

composer create-project --prefer-dist laravel/laravel example-kinsta-app dev-master

Para entender mejor el comando Composer, aquí tienes una explicación rápida:

  • laravel/laravel: El paquete para la instalación de Laravel
  • example-kinsta-app: El nuevo directorio para tu nuevo proyecto (puede cambiarse)
  • dev-master: La próxima versión de Laravel (en este caso, Laravel 11)

Después de instalar Laravel 11, puedes confirmar la versión navegando al nuevo directorio example-kinsta-app y ejecutando este comando de Artisan:

$ php artisan --version
Laravel Framework 11.x-dev

Cómo Actualizar un Proyecto a Laravel 10

¿Estás tentado a actualizar a Laravel 10? El core team de Laravel trabaja duro en la documentación para proporcionar una guía de actualización fluida y sencilla que incluya todos los posibles cambios de última hora. No dudes en consultar la guía oficial de actualización a Laravel 10.

También deberías echar un ojo a Laravel Shift ahora que se ha lanzado Laravel 10. Laravel Shift ofrece un enfoque sencillo y automatizado para actualizar tu versión de Laravel.

Cómo Desplegar Proyectos Laravel 10

Desplegar Laravel 10 no es diferente de desplegar un proyecto Laravel 9.

Estos son los requisitos del servidor:

  • PHP ≤ 8.1
  • Extensión PHP ctype
  • Extensión PHP cURL
  • Extensión DOM PHP
  • Extensión PHP Fileinfo
  • Extensión PHP Mbstring
  • Extensión PHP OpenSSL
  • Extensión PHP PCRE
  • Extensión PHP PDO
  • Extensión PHP Tokenizer
  • Extensión PHP XML
  • Extensión PHP Filter
  • Extensión PHP Hash
  • Extensión PHP Session

Puedes desplegar y alojar tu proyecto Laravel 10 en Kinsta en cuestión de minutos, ya que Laravel forma parte de una larga lista de frameworks compatibles con aplicaciones alojadas.

Desplegando Laravel 10 en Kinsta: Guía Paso a Paso

Alojar y desplegar tus aplicaciones en Kinsta tiene varias ventajas, como no tener que preocuparte de la configuración del despliegue.

Kinsta proporciona una herramienta fácil de usar pero potente para desplegar aplicaciones, conectarse a bases de datos y supervisar el rendimiento en directo. Esta herramienta se conoce como MyKinsta, y en esta sección, te guiaremos a través de los pasos para desplegar una aplicación Laravel 10 utilizándola.

1. Prepara Tu Aplicación

Un ejemplo de página de aplicación Laravel 10, mostrando "Laravel Kinsta" en la parte superior seguido de una cuadrícula de cuatro cajas de contenido con las etiquetas "Kinsta", "Laracasts", "Laravel News", y "Vibrand Ecosystem".
La página de inicio de una aplicación Laravel 10 desplegada en Kinsta.

Asumiendo que tienes la aplicación Laravel 10 en local, necesitamos asegurarnos de que tenga un repositorio GitHub disponible. Usaremos este repositorio para desplegar la aplicación más adelante.

Puedes incluir un archivo .htaccess en el directorio root de tu aplicación que contenga lo siguiente:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Para Laravel, esto redirige todas las peticiones a public/index.php. Sin embargo, si es necesario, puedes actualizar este comando mientras añades tu aplicación (paso Configurar tus procesos) o después del despliegue, en la página Procesos de la aplicación. Puedes utilizar:

  • heroku-php-apache2 /public
  • php artisan serve --host 0.0.0.0 --port 8080

2. Iniciar Sesión en MyKinsta

Un formulario de inicio de sesión para MyKinsta, mostrando "MyKinsta Login" en la parte superior seguido de los campos "Email y "Password", con un botón morado "Login" en la parte inferior.
La página de inicio de sesión de MyKinsta.

Dirígete a la página de inicio de sesión de MyKinsta e introduce tu dirección de correo electrónico y tu contraseña. Si aún no tienes una cuenta, puedes registrar una nueva y obtener 20 $ de descuento en tu primer mes de suscripción a cualquier plan de precios.

3. Autorizar Kinsta en GitHub

Una vez que inicies sesión, verás que el panel de control tiene opciones para crear un sitio WordPress, crear una aplicación o crear una base de datos. Pulsaremos sobre el botón Conectar GitHub para integrarnos con GitHub.

Una parte del panel de MyKinsta, que muestra tres mosaicos rectangulares: "Sitio WordPress" con un botón de acción "Crear un sitio"; "Aplicación" con un botón de acción "Conectar GitHub"; y "Base de datos" con un botón de acción "Crear base de datos".
El panel de MyKinsta.

A continuación, pulsa el botón Continuar con GitHub. Si aún no has iniciado sesión en GitHub, se te mostrará la opción de hacerlo. A continuación, puedes autorizar a la aplicación Kinsta GitHub a acceder a tu cuenta de GitHub seleccionando Autorizar Kinsta.

Por último, GitHub redirigirá tu navegador a MyKinsta para continuar configurando la aplicación.

Una ventana modal que dice "Integración con GitHub: Conecta Kinsta a tu espacio de nombres Gitub aquí para importar tus repositorios existentes" con un botón blanco "Cancelar" y un botón morado "Continuar con GitHub".
Conectar MyKinsta a GitHub.

Una vez conectado a GitHub, se te mostrará la ventana emergente/modal Añadir Aplicación, que tiene un menú desplegable para seleccionar un repositorio de GitHub. Haz clic en el campo Repositorio de GitHub y selecciona Editar permisos de GitHub en el desplegable.

El formulario "Añadir aplicación" en MyKinsta, centrado en la subsección "Detalles de la aplicación", con el texto "Seleccionar rama" seguido de dos campos: "Repositorio GitHub" y "Rama por defecto".
Añadir una aplicación a MyKinsta.

Esto abrirá una nueva pestaña en tu navegador a la página web de GitHub, donde podrás elegir a qué datos podrá acceder Kinsta. En lugar de habilitar el acceso a todos los repositorios, considera elegir sólo el/los que quieras que utilice Kinsta.

Haz clic en Solo seleccionar repositorios y elige el repositorio que deseas desplegar.

Aparecerá el mensaje "Instalar Kinsta", mostrando opciones para permitir el acceso a "Todos los repositorios" o "Solo a los repositorios seleccionados", seguido de un botón verde "Instalar".
Conceder a Kinsta acceso a GitHub.

A continuación, haz clic en Instalar y ¡listo!

Cuando vuelvas a MyKinsta y hagas clic en el campo Repositorio de GitHub, el repositorio autorizado debería ser visible. Además, puedes marcar la casilla Despliegue automático al confirmar para que MyKinsta despliegue automáticamente tu aplicación en cuanto realices cambios en el repositorio de GitHub.

La sección de la aplicación "Seleccionar rama" en MyKinsta, que muestra los dos campos "Repositorio de GitHub" y "Rama predeterminada" y una casilla marcada con la etiqueta "Despliegue automático al confirmar".
Seleccionar una rama del repositorio para MyKinsta.

4. Añadir Detalles Básicos de la Aplicación

Ahora puedes dar a la aplicación un nombre que solo se utilizará en el panel de control y seleccionar entre 25 ubicaciones de centros de datos, lo que te permitirá colocar tu aplicación en la ubicación geográfica más cercana a tus usuarios. Si necesitas ayuda para determinar qué centro de datos es el ideal para tu aplicación, consulta nuestra guía para elegir la ubicación correcta del centro de datos.

La sección "Detalles básicos" del proceso de creación de la aplicación MyKinsta, que muestra los campos "Nombre de la aplicación" y "Ubicación del centro de datos".
Añadir los detalles básicos de una aplicación.

5. Añadir Variables de Entorno

La siguiente sección es para añadir variables de entorno y la variable más importante es la APP_KEY.

Si aún no tienes una clave en tu archivo .env, puedes generar una utilizando un generador de claves Laravel online. A continuación, inserta APP_KEY en el campo Clave 1 e inserta la clave de la app generada en el campo Valor 1.

Por último, selecciona Disponible durante el tiempo de ejecución y Disponible durante el proceso de construcción.

La sección de la aplicación "Variables de entorno" en MyKinsta, que muestra los campos "Clave 1" y "Valor 1", así como las casillas de verificación "Disponible durante el tiempo de ejecución" y "Disponible durante el proceso de construcción".
Añadir variables de entorno en MyKinsta.

5. Configurar el Entorno de Construcción

Lo mágico aquí es que ¡no tienes que configurar nada! Puedes proceder haciendo clic en el botón Continuar, y voilà: Has completado la configuración del entorno de construcción. Sin embargo, si quieres mejorar los recursos de construcción para garantizar una construcción más rápida, puedes elegir la opción que prefieras en el campo Recursos de construcción.

El campo Ruta de construcción es opcional. Puedes dejarlo vacío, y MyKinsta utilizará la carpeta root.

La sección de la aplicación "Entorno de Construcción" en MyKinsta, con campos y cuadros de selección para "Construir recursos", "Configurar imagen de contenedor automáticamente" y "Usar Dockerfile para configurar imagen de contenedor".
Configurar el entorno de compilación de la aplicación.

6. Configurar Procesos y Forma de Pago

En la sección Recursos, rellena cada campo con la siguiente información:

  • Nombre del proceso: El nombre que aparece en la lista de procesos de tu aplicación.
  • Tipo de proceso: Elige con cuidado, porque no se puede cambiar una vez establecido. Sin embargo, puedes añadir y cambiar procesos adicionales, como un trabajo en segundo plano, en la página Procesos de tu aplicación después del despliegue.
  • Comando de inicio: El comando «Start» de tu proceso (no es obligatorio).
  • Tamaño del pod: La capacidad del pod que esperas necesitar para tu proceso.
  • Número de instancias: El número de instancias para tu proceso (máximo 50).

Ten en cuenta que puedes hacer clic en Continuar sin rellenar el campo Comando de inicio, ya que Kinsta detecta automáticamente el comando necesario durante el primer despliegue.

La sección "Añadir aplicación: Configura tu proceso" en MyKinsta, mostrando los campos "Nombre del proceso", "Tipo de proceso", "Comando de inicio", "Tamaño del pod" y "Recuento de instancias".
Configurar los procesos de la aplicación.

Para el último paso, revisa los costes de uso mensuales calculados para tu aplicación, y luego confirma tu método de pago. Cuando hayas terminado, haz clic en el botón Confirmar método de pago.

La pantalla de detalles de pago en MyKinsta, que muestra los "Costes mensuales de uso" y el "Método de pago", este último con una tarjeta Visa.
Confirma los datos de pago.

¡Y ya está! Kinsta hará todo el trabajo en segundo plano para entregar tu aplicación.

La pestaña "Aplicaciones" en Mykinsta, que muestra una aplicación desplegada llamada "example-kinsta-app" junto con su fuente, tipo y fecha de la última modificación.
Cargando el proceso de despliegue de la aplicación.

Entonces tendrás acceso a todos los detalles del proceso de despliegue, así como a la URL temporal de la aplicación en producción, que más tarde podrás sustituir por tu propio dominio.

La sección " Detalles de despliegue " en MyKinsta después de desplegar con éxito la aplicación, que muestra la información de instalación de la aplicación junto con los avisos de verificación de construcción y despliegue.
Despliegue con éxito de la aplicación Laravel 10 en MyKinsta.

Tu aplicación Laravel 10 ya está en producción en Kinsta, pero ¿qué pasa si necesitas hacer un cambio en producción? ¿Qué pasa si queremos cambiar el atributo href de una etiqueta de anclaje?

Como hemos activado la opción Despliegue automático al confirmar, MyKinsta detectará cualquier cambio que hagamos en la rama desplegada y actualizará automáticamente la aplicación en producción en consecuencia.

7. Conecta Laravel 10 a la Base de Datos MySQL

Ahora que hemos desplegado nuestra aplicación Laravel 10, podemos construir sin esfuerzo una base de datos y vincularla a nuestra aplicación. Todo lo que tienes que hacer es hacer clic en Aplicaciones en el menú de navegación de la izquierda, luego en Añadir servicio y seleccionar Base de Datos.

La opción "Crear una base de datos" en MyKinsta, que muestra campos para proporcionar la información básica de la base de datos, seguida de un botón morado "Crear base de datos".
Añadir una nueva base de datos en MyKinsta.

Después de rellenar todos los campos, haz clic en Crear base de datos. Esto establecerá una nueva base de datos lista para conexiones internas y externas. En nuestro escenario, necesitamos una conexión interna al proyecto Laravel 10 que hemos desplegado.

Para ello, sólo tienes que hacer clic en Añadir aplicación en la sección Conexiones internas y seleccionar tu aplicación. Puedes marcar la casilla Añadir variables de entorno a la aplicación y MyKinsta rellenará todas las variables .env que necesite tu aplicación.

La opción "Añadir conexión interna" en MyKinsta para conectar una base de datos a una aplicación, con campos de valor clave seguidos de un botón "Añadir conexión".
Conectar una base de datos a una aplicación Laravel 10.

Con esto, tu aplicación Laravel 10 está desplegada y conectada a una base de datos.

Cómo Contribuir a Laravel 10

Aunque Laravel es mantenido por el core team, es desarrollado activamente por más de 3.000 colaboradores voluntarios.

¿Quieres ser uno de esos colaboradores y ayudar a dar forma al futuro de Laravel? Si tu respuesta es afirmativa, podrías ayudar a desarrolladores de todo el mundo añadiendo una nueva función, corrigiendo un error o incluso reescribiendo una parte confusa de la documentación.

Para contribuir a Laravel 10, esto es lo que tienes que hacer:

  1. Dirígete al repositorio GitHub de Laravel y echa un vistazo a los pull requests etiquetados con [10.x] en el título. Esto te proporcionará una visión clara de todos los pull requests para Laravel 10. Si uno de los PR aborda la contribución que pretendías hacer, comprueba si puedes mejorarla.
  2. Si tu contribución prevista aún no ha sido abordada por otra persona, entonces puedes crear tú mismo un PR.
  3. No vale la pena añadir todo al código base del framework. Por lo tanto, esfuérzate por implementar únicamente mejoras que sean fáciles de mantener en el futuro y que ayuden a la gran mayoría de la comunidad Laravel.
  4. Asegúrate de cumplir las directrices de contribución de Laravel para tener más posibilidades de que tus cambios se fusionen con el framework.

Otra razón para amar Laravel 10 es que ¡te permite ganar dinero por tus contribuciones con la caza de errores! Lo veremos a continuación.

Concurso de Caza de Errores de Laravel 10

El logotipo de Laravel 10 seguido de un insecto verde de dibujos animados con rayas grises.
Concurso de caza de errores de Laravel 10.

Laravel 10 ha anunciado un excelente concurso en el que un colaborador al azar tiene la oportunidad de ganar 1.000 $. Se trata del primer concurso de este tipo en la historia de Laravel. Se diseñó para animar a la comunidad a encontrar y parchear errores ocultos en Laravel 10.

Las reglas son sencillas:

  • Solamente son elegibles los PRs enviados a la rama 10.x del repositorio laravel/framework.
  • Solo se han tenido en cuenta las «auténticas» correcciones de errores. No se han tenido en cuenta las nuevas funciones, la refactorización ni la corrección de erratas.
  • Cada corrección de errores debe estar respaldada por una prueba.
  • Las correcciones de errores aceptadas se han etiquetado en GitHub, y tras la finalización del concurso se anunciará un ganador al azar.

El concurso finalizó cuando se publicó la primera versión estable de Laravel 10, el 14 de febrero de 2023.

Resumen

Hasta ahora, Laravel 10 parece ser extremadamente prometedor, y estamos emocionados por descubrir todos los avances que trae al mundo PHP.

Si buscas más formas de mejorar el rendimiento de tu aplicación Laravel, puedes plantearte cambiar a un proveedor de alojamiento premium. Las soluciones de Alojamiento de Aplicaciones de Kinsta se encuentran entre las más rápidas, seguras y fáciles de usar del sector, y están diseñadas específicamente pensando en los desarrolladores, ya que ofrecen optimización de la producción y asistencia experta 24 horas al día, 7 días a la semana, por parte de nuestros propios desarrolladores expertos.

Mostafa Said

Soy Mostafa, un desarrollador full-stack con un don para todo lo relacionado con Laravel, Inertia y frameworks JavaScript. Cuando no estoy programando, puedes encontrarme compartiendo mis conocimientos a través de tutoriales, participando en hackatones (y ganando unos cuantos) y difundiendo el amor por la tecnología enseñando lo que he aprendido.