Notas de la version laravel 11
Notas de la versión
Esquema de versiones
Laravel y sus otros paquetes propios siguen Semantic Versioning. Las versiones principales del framework se publican cada año (~Q1), mientras que las versiones menores y de parche pueden publicarse con una frecuencia de hasta una semana. Las versiones menores y de parche nunca deben contener cambios de ruptura.
Cuando hagas referencia al framework Laravel o a sus componentes desde tu aplicación o paquete, siempre debes utilizar una restricción de versión como ^11.0
, ya que las versiones mayores de Laravel incluyen cambios de última hora. Sin embargo, nos esforzamos por garantizar siempre que pueda actualizar a una nueva versión principal en un día o menos.
Argumentos con nombre
Los argumentos con nombre no están cubiertos por las directrices de retrocompatibilidad de Laravel. Podemos optar por cambiar el nombre de los argumentos de función cuando sea necesario con el fin de mejorar la base de código Laravel. Por lo tanto, el uso de argumentos con nombre al llamar a métodos Laravel debe hacerse con cautela y con la comprensión de que los nombres de los parámetros pueden cambiar en el futuro.
Política de soporte
Para todas las versiones de Laravel, se proporcionan correcciones de errores durante 18 meses y correcciones de seguridad durante 2 años. Para todas las bibliotecas adicionales, incluyendo Lumen, sólo la última versión principal recibe correcciones de errores. Además, por favor revise las versiones de bases de datos soportadas por Laravel.
Versión | PHP (*) | Corrección de errores hasta | Correcciones de seguridad Hasta |
---|---|---|---|
9 | 8.0 – 8.2 | 8 de febrero de 2022 | 6 de febrero de 2024 |
10 | 8.1 – 8.3 | 14 de febrero de 2023 | 4 de febrero de 2025 |
11 | 8.2 – 8.3 | 12 de marzo de 2024 | 12 de marzo de 2026 |
12 | 8.2 – 8.3 | Primer trimestre de 2025 | Primer trimestre de 2027 |
Fin de la vida útil
Sólo correcciones de seguridad
(*) Versiones de PHP soportadas
Laravel 11
Laravel 11 continúa las mejoras realizadas en Laravel 10.x mediante la introducción de una estructura de aplicación optimizada, limitación de velocidad por segundo, enrutamiento de salud, rotación de claves de cifrado con gracia, mejoras en las pruebas de cola, transporte de correo Resend, integración del validador Prompt, nuevos comandos Artisan y mucho más. Además, se ha introducido Laravel Reverb, un servidor WebSocket escalable de primera parte para proporcionar capacidades robustas en tiempo real a sus aplicaciones.
PHP 8.2
Laravel 11.x requiere una versión mínima de PHP 8.2.
Estructura de aplicaciones simplificada
La estructura de aplicaciones simplificada de Laravel fue desarrollada por Taylor Otwell y Nuno Maduro.
Laravel 11 introduce una estructura de aplicación simplificada para nuevas aplicaciones Laravel, sin requerir ningún cambio en las aplicaciones existentes. La nueva estructura de la aplicación está destinada a proporcionar una experiencia más ágil y moderna, al tiempo que conserva muchos de los conceptos con los que los desarrolladores de Laravel ya están familiarizados. A continuación vamos a discutir los aspectos más destacados de la nueva estructura de aplicaciones de Laravel.
El archivo Bootstrap de la aplicación
El archivo bootstrap/app.php
ha sido revitalizado como un archivo de configuración de aplicaciones basado en código. Desde este archivo, ahora puede personalizar el enrutamiento de su aplicación, middleware, proveedores de servicios, manejo de excepciones y más. Este archivo unifica una variedad de configuraciones de comportamiento de alto nivel de la aplicación que antes estaban dispersas por toda la estructura de archivos de su aplicación:
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
//
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
Proveedores de servicios
En lugar de que la estructura por defecto de la aplicación Laravel contenga cinco proveedores de servicios, Laravel 11 sólo incluye un único AppServiceProvider
. La funcionalidad de los proveedores de servicios anteriores se ha incorporado en el bootstrap/app.php
, es manejada automáticamente por el marco, o puede ser colocada en el AppServiceProvider
de su aplicación.
Por ejemplo, el descubrimiento de eventos está ahora activado por defecto, eliminando en gran medida la necesidad de registro manual de eventos y sus oyentes. Sin embargo, si necesitas registrar eventos manualmente, puedes hacerlo en el AppServiceProvider
. Del mismo modo, los enlaces del modelo de ruta o las puertas de autorización que haya registrado previamente en AuthServiceProvider
también se pueden registrar en AppServiceProvider
.
Aplicación de la API y enrutamiento de difusión
Los archivos de ruta api.php
y channels.php
ya no están presentes por defecto, ya que muchas aplicaciones no requieren estos archivos. En su lugar, pueden ser creados usando comandos simples de Artisan:
php artisan install:api
php artisan install:broadcasting
Software intermedio
Anteriormente, las nuevas aplicaciones Laravel incluían nueve middleware. Estos middleware realizaban una variedad de tareas como autenticar peticiones, recortar cadenas de entrada y validar tokens CSRF.
En Laravel 11, estos middleware se han trasladado al propio framework, de modo que no añaden volumen a la estructura de tu aplicación. Nuevos métodos para personalizar el comportamiento de estos middleware se han añadido al framework y pueden ser invocados desde el archivo bootstrap/app.php
de tu aplicación:
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(
except: ['stripe/*']
);
$middleware->web(append: [
EnsureUserIsSubscribed::class,
]);
})
Dado que todo el middleware se puede personalizar fácilmente a través de bootstrap/app.php
de tu aplicación, se ha eliminado la necesidad de una clase HTTP «kernel» independiente.
Programación
Utilizando una nueva fachada Programación
, ahora se pueden definir tareas programadas directamente en el archivo routes/console.php
de tu aplicación, eliminando la necesidad de una clase «kernel» de consola independiente:
use Console\Console;
Program::command('emails:send')->daily();
Manejo de excepciones
Al igual que el enrutamiento y el middleware, el manejo de excepciones ahora se puede personalizar desde el archivo bootstrap/app.php
de su aplicación en lugar de una clase de manejador de excepciones separadas, lo que reduce el número total de archivos incluidos en una nueva aplicación Laravel:
->withExceptions(function (Exceptions $exceptions) {
$exceptions->dontReport(MissedFlightException::class);
$exceptions->report(function (InvalidOrderException $e) {
// ...
});
})
Base de clase Controlador
El controlador base incluido en las nuevas aplicaciones Laravel se ha simplificado. Ya no extiende la clase interna de Laravel Controller
, y se han eliminado los rasgos AuthorizesRequests
y ValidatesRequests
, ya que pueden incluirse en los controladores individuales de tu aplicación si lo deseas:
<?php
namespace App\Http\Controllers;
abstract class Controller
{
//
}
Por defecto de la aplicación
Por defecto, las nuevas aplicaciones Laravel utilizan SQLite para el almacenamiento de bases de datos, así como el database
driver para la sesión, caché y cola de Laravel. Esto le permite comenzar a construir su aplicación inmediatamente después de crear una nueva aplicación Laravel, sin ser necesario instalar software adicional o crear migraciones de bases de datos adicionales.
Además, con el tiempo, los controladores de bases de datos para estos servicios de Laravel se han vuelto lo suficientemente robustos para su uso en producción en muchos contextos de aplicación; Por lo tanto, proporciona una opción sensata y unificada tanto para aplicaciones locales como de producción.
Reverberación de Laravel
Laravel Reverb ha sido desarrollado por Joe Dixon.
Laravel Reverb aporta una comunicación WebSocket en tiempo real ultrarrápida y escalable directamente a su aplicación Laravel, y proporciona una integración perfecta con el conjunto existente de herramientas de transmisión de eventos de Laravel, como Laravel Echo.
php artisan reverb:start
Además, Reverb admite el escalado horizontal a través de las capacidades de publicación / suscripción de Redis, lo que le permite distribuir su tráfico WebSocket a través de múltiples servidores backend de Reverb, todos ellos soportando una única aplicación de alta demanda.
Para obtener más información sobre Laravel Reverb, consulta la documentación completa de Reverb.
Limitación de la tasa por segundo
La limitación de tasa por segundo fue aportada por Tim MacDonald.
Laravel soporta ahora la limitación de tasa «por segundo» para todos los limitadores de tasa, incluyendo aquellos para peticiones HTTP y trabajos en cola. Anteriormente, los limitadores de tasa de Laravel estaban limitados a granularidad «por minuto»:
RateLimiter::for('invoices', function (Request $request) {
return Limit::perSecond(1);
});
Para más información sobre la limitación de tasas en Laravel, consulta la documentación sobre limitación de tasas.
Enrutamiento de la salud
El enrutamiento de salud fue contribuido por Taylor Otwell.
Las nuevas aplicaciones Laravel 11 incluyen una directiva de enrutamiento health
, que indica a Laravel que define un punto final de comprobación de salud simple que pueda ser invocado por servicios de monitorización de salud de aplicaciones de terceros o sistemas de orquestación como Kubernetes. Por defecto, esta ruta se sirve en /up
:
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
Cuando se realizan solicitudes HTTP a esta ruta, Laravel también enviará un evento DiagnosingHealth
, permitiéndote realizar comprobaciones de salud adicionales que sean relevantes para tu aplicación.
Rotación de claves de cifrado
La rotación elegante de la clave de cifrado fue contribuyente de Taylor Otwell.
Dado que Laravel cifra todas las cookies, incluida la cookie de sesión de tu aplicación, esencialmente cada solicitud a una aplicación Laravel depende del cifrado. Sin embargo, debido a esto, rotar la clave de cifrado de tu aplicación haría que todos los usuarios salieran de tu aplicación. Además, resulta imposible descifrar los datos cifrados con la clave de cifrado anterior.
Laravel 11 te permite definir las claves de cifrado anteriores de tu aplicación como una lista delimitada por comas a través de la variable de entorno APP_PREVIOUS_KEYS
.
Al cifrar valores, Laravel siempre utilizará la clave de cifrado «actual», que se encuentra dentro de la variable de entorno APP_KEY
. Al descifrar valores, Laravel probará primero con la clave actual. Si el descifrado falla usando la clave actual, Laravel intentará con todas las claves anteriores hasta que una de ellas sea capaz de descifrar el valor.
Esta aproximación al descifrado elegante permite a los usuarios seguir usando tu aplicación sin interrupciones incluso si tu clave de cifrado está rotada.
Para obtener más información sobre el cifrado en Laravel, consulte la documentación sobre cifrado.
Refrito automático de contraseñas
La repetición automática de contraseñas fue aportada por Stephen Rees-Carter.
El algoritmo de hash de contraseña por defecto de Laravel es bcrypt. El «factor de trabajo» para los hashes bcrypt se puede ajustar a través del archivo de configuración config/hashing.php
o la variable de entorno BCRYPT_ROUNDS
.
Normalmente, el factor de trabajo de bcrypt debe aumentarse con el tiempo a medida que aumenta la potencia de procesamiento de la CPU/GPU. Si aumenta el factor de trabajo bcrypt para su aplicación, Laravel ahora con gracia y automáticamente rehash contraseñas de usuario como los usuarios se autentican con su aplicación.
Validación de contraseñas
La integración del validador de avisos fue aportada por Andrea Marco Sartori.
Laravel Prompts es un paquete PHP para agregar formularios bonitos y fáciles de usar a sus aplicaciones de línea de comandos, con características similares a las de un navegador, incluyendo texto de marcador de posición y validación.
Laravel Prompts admite la validación de entrada mediante cierres:
$name = text(
label: 'What is your name?',
validate: fn (string $value) => match (true) {
strlen($value) < 3 => 'The name must be at least 3 characters.',
strlen($value) > 255 => 'The name must not exceed 255 characters.',
default => null
}
);
Sin embargo, esto puede volverse complicado cuando se trabaja con muchas entradas o escenarios de validación complicados. Por lo tanto, en Laravel 11, puedes utilizar todo el poder del validador de Laravel al validar las entradas de solicitud:
$nombre = text('¿Cómo te llamas?', validate: [
'nombre' => 'required|min:3|max:255',
]);
Pruebas de interacción de colas
Las pruebas de interacción de colas han sido aportadas por Taylor Otwell.
Anteriormente, intentar probar que un trabajo en cola era liberado, eliminado o fallaba manualmente era engorroso y requería la definición de fakes y stubs de cola personalizados. Sin embargo, en Laravel 11, puedes probar fácilmente estas interacciones de cola utilizando el método withFakeQueueInteractions
:
use App\Jobs\ProcessPodcast;
$job = (new ProcessPodcast)->withFakeQueueInteractions();
$job->handle();
$job->assertReleased(delay: 30);
Para obtener más información sobre cómo probar trabajos en cola, consulte la documentación de la cola.
Nuevos comandos de artesano
Los comandos de creación de clases de Artisan fueron aportados por Taylor Otwell.
Se han agregado nuevos comandos Artisan para permitir la creación rápida de clases, enumeraciones, interfaces y características:
php artisan make:class
php artisan make:enum
php artisan make:interface
php artisan make:trait
Mejoras en los moldes
Las mejoras en los calcos de modelos han sido aportadas por Nuno Maduro.
Laravel 11 soporta definir los cast de tu modelo usando un método en lugar de una propiedad. Esto permite definiciones de cast simplificadas y fluidas, especialmente cuando se utilizan cast con argumentos:
/**
* Obtener los atributos que deben fundirse.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'options' => AsCollection::using(OptionCollection::class),
// AsEncryptedCollection::using(OptionCollection::class),
// AsEnumArrayObject::using(OptionEnum::class),
// AsEnumCollection::using(OptionEnum::class),
];
}
Para obtener más información sobre la conversión de atributos, revise la documentación de Eloquent.
La función once
El ayudante once
fue aportado por Taylor Otwell y Nuno Maduro.
La función de ayuda once
ejecuta la llamada de retorno dada y almacena en caché el resultado en la memoria mientras dure la solicitud. Cualquier llamada posterior a la función once
con la misma devolución de llamada devolverá el resultado almacenado en caché anteriormente:
function random(): int
{
return once(function () {
return random_int(1, 1000);
});
}
random(); // 123
random(); // 123 (resultado en caché)
random(); // 123 (resultado en caché)
Para más información sobre el ayudante once
, consulte la documentación de ayudantes.
Mejora del rendimiento al realizar pruebas con bases de datos en memoria
El rendimiento mejorado de las pruebas con bases de datos en memoria fue aportado por Anders Jenbo.
Laravel 11 ofrece una mejora significativa de la velocidad cuando se utiliza la base de datos :memory:
SQLite durante las pruebas. Para lograr esto, Laravel ahora mantiene una referencia al objeto PDO de PHP y lo reutiliza a través de conexiones, a menudo reduciendo el tiempo total de ejecución de la prueba a la mitad.
Soporte mejorado para MariaDB
El soporte mejorado para MariaDB ha sido aportado por Jonas Staudenmeir y Julius Kiekbusch.
Laravel 11 incluye soporte mejorado para MariaDB. En versiones anteriores de Laravel, podíamos utilizar MariaDB a través del controlador MySQL de Laravel. Sin embargo, Laravel 11 ahora incluye un controlador MariaDB dedicado que proporciona mejores valores predeterminados para este sistema de base de datos.
Para más información sobre los drivers de bases de datos de Laravel, consulta la documentación sobre bases de datos.
Inspección de bases de datos y operaciones de esquema mejoradas
Operaciones de esquema e inspección de bases de datos mejoradas fueron aportadas por Hafez Divandari.
Laravel 11 proporciona métodos adicionales de operación e inspección del esquema de la base de datos, incluyendo la modificación, renombrado y eliminación nativa de columnas. Además, se proporcionan tipos espaciales avanzados, nombres de esquema no predeterminados y métodos de esquema nativos para manipular tablas, vistas, columnas, índices y claves externas:
use Illuminate\Support\Facades\Schema;
$tables = Schema::getTables();
$views = Schema::getViews();
$columns = Schema::getColumns('users');
$indexes = Schema::getIndexes('users');
$foreignKeys = Schema::getForeignKeys('users');