Documentación de Laravel 10.x
Aquí encontrarás fragmentos de código de Laravel y consejos útiles sobre desarrollo web.
Nota Intentamos documentar cada posible cambio que podría causar problemas. Dado que algunos de estos cambios rompedores se encuentran en partes más oscuras del framework, es posible que solo una parte de estos cambios afecte realmente a tu aplicación. ¿Quieres ahorrar tiempo? Puedes utilizar Laravel Shift para ayudar a automatizar las actualizaciones de tu aplicación.
Probabilidad de Impacto: Alta
Laravel ahora requiere PHP 8.1.0 o superior.
Laravel ahora requiere Composer 2.2.0 o superior.
Deberías actualizar las siguientes dependencias en el archivo composer.json
de tu aplicación:
laravel/framework
to ^10.0
laravel/sanctum
to ^3.2
doctrine/dbal
to ^3.0
spatie/laravel-ignition
to ^2.0
laravel/passport
to ^11.0
(Upgrade Guide)Si estás actualizando a Sanctum 3.x desde la serie de versiones 2.x, consulta la guía de actualización de Sanctum.
Además, si deseas utilizar PHPUnit 10, deberías eliminar el atributo processUncoveredFiles
de la sección <coverage>
del archivo de configuración phpunit.xml
de tu aplicación. Luego, actualiza las siguientes dependencias en el archivo composer.json
de tu aplicación:
nunomaduro/collision
to ^7.0
phpunit/phpunit
to ^10.0
Finalmente, examina cualquier otro paquete de terceros consumido por tu aplicación y verifica que estás utilizando la versión adecuada para el soporte de Laravel 10.
Deberías actualizar el ajuste minimum-stability
en el archivo composer.json
de tu aplicación a stable
. O, dado que el valor predeterminado de minimum-stability
es stable
, puedes eliminar esta configuración del archivo composer.json
de tu aplicación:
"minimum-stability": "stable",
Probabilidad de Impacto: Baja
Si tu aplicación personaliza su "ruta pública" vinculando path.public
en el contenedor, deberías actualizar tu código para invocar el método usePublicPath
ofrecido por el objeto Illuminate\Foundation\Application
:
app()->usePublicPath(__DIR__.'/public');
registerPolicies
Probabilidad de Impacto: Baja
El método registerPolicies
de AuthServiceProvider
ahora se invoca automáticamente por el framework. Por lo tanto, puedes quitar la llamada a este método del método boot
de AuthServiceProvider
de tu aplicación.
Probabilidad de Impacto: Media
El soporte para etiquetas de caché de Redis ha sido reescrito para mejorar el rendimiento y la eficiencia de almacenamiento. En versiones anteriores de Laravel, las etiquetas de caché obsoletas se acumulaban en la caché cuando se usaba Redis como el controlador de caché de tu aplicación.
Sin embargo, para podar adecuadamente las entradas obsoletas de las etiquetas de caché, el nuevo comando Artisan cache:prune-stale-tags
de Laravel debe ser programado en la clase App\Console\Kernel
de tu aplicación:
$schedule->command('cache:prune-stale-tags')->hourly();
Probabilidad de Impacto: Media
Las "expresiones" de base de datos (normalmente generadas mediante DB::raw
) se han reescrito en Laravel 10.x para ofrecer funcionalidades adicionales en el futuro. Especialmente, el valor de cadena sin procesar de la gramática ahora debe recuperarse mediante el método getValue(Grammar $grammar)
de la expresión. Ya no se admite convertir una expresión a una cadena utilizando (string)
.
Normalmente, esto no afecta a las aplicaciones de usuarios finales; sin embargo, si tu aplicación está convirtiendo manualmente expresiones de base de datos a cadenas usando (string)
o invocando directamente el método __toString
en la expresión, deberías actualizar tu código para invocar el método getValue
en su lugar:
use Illuminate\Support\Facades\DB; $expression = DB::raw('select 1'); $string = $expression->getValue(DB::connection()->getQueryGrammar());
Probabilidad de Impacto: Muy Baja
Ahora, el constructor de Illuminate\Database\QueryException
acepta un nombre de conexión como su primer argumento. Si tu aplicación está lanzando manualmente esta excepción, deberías ajustar tu código en consecuencia.
Probabilidad de Impacto: Baja
Cuando las migraciones invocan el método ulid
sin argumentos, la columna ahora se llamará ulid
. En versiones anteriores de Laravel, invocar este método sin argumentos creaba una columna llamada erróneamente uuid
:
$table->ulid();
Para especificar explícitamente un nombre de columna al invocar el método ulid
, puedes pasar el nombre de la columna al método:
$table->ulid('ulid');
Probabilidad de Impacto: Media
La propiedad $dates
obsoleta del modelo Eloquent ha sido eliminada. Ahora, tu aplicación debería usar la propiedad $casts
:
protected $casts = [ 'deployed_at' => 'datetime',];
Probabilidad de Impacto: Ninguna
Aunque no es relevante para aplicaciones existentes, el esqueleto de la aplicación Laravel ya no contiene el directorio lang
de forma predeterminada. En su lugar, al escribir nuevas aplicaciones Laravel, se puede publicar utilizando el comando Artisan lang:publish
:
php artisan lang:publish
Probabilidad de Impacto: Media
La dependencia de Monolog de Laravel se ha actualizado a Monolog 3.x. Si estás interactuando directamente con Monolog dentro de tu aplicación, deberías revisar la guía de actualización de Monolog.
Si estás utilizando servicios de registro de terceros como BugSnag o Rollbar, es posible que necesites actualizar esos paquetes de terceros a una versión que admita Monolog 3.x y Laravel 10.x.
Bus::dispatchNow
Probabilidad de Impacto: Baja
Los métodos obsoletos Bus::dispatchNow
y dispatch_now
han sido eliminados. En su lugar, tu aplicación debería usar los métodos Bus::dispatchSync
y dispatch_sync
, respectivamente.
Probabilidad de Impacto: Opcional
En las nuevas aplicaciones Laravel, la propiedad $routeMiddleware
de la clase App\Http\Kernel
se ha renombrado a $middlewareAliases
para reflejar mejor su propósito. Puedes renombrar esta propiedad en tus aplicaciones existentes si lo deseas; sin embargo, no es necesario.
Probabilidad de Impacto: Baja
Cuando se invoca el método RateLimiter::attempt
, el valor devuelto por la clausura proporcionada ahora se devolverá también por el método. Si no se devuelve nada o null
, el método attempt
devolverá true
:
$value = RateLimiter::attempt('key', 10, fn () => ['example'], 1); $value; // ['example']
Redirect::home
Probabilidad de Impacto: Muy Baja
El método obsoleto Redirect::home
ha sido eliminado. En su lugar, tu aplicación debería redirigir a una ruta nombrada explícitamente:
return Redirect::route('home');
Probabilidad de Impacto: Media
El rasgo obsoleto MocksApplicationServices
ha sido eliminado del framework. Este rasgo proporcionaba métodos de prueba como expectsEvents
, expectsJobs
y expectsNotifications
.
Si tu aplicación utiliza estos métodos, te recomendamos que hagas la transición a Event::fake
, Bus::fake
y Notification::fake
, respectivamente. Puedes obtener más información sobre el burlado a través de "fakes" en la documentación correspondiente al componente que estás intentando simular.
Probabilidad de Impacto: Muy Baja
Cuando escribas reglas de validación personalizadas basadas en cierres, invocar el callback $fail
más de una vez ahora anexará los mensajes a un array en lugar de sobrescribir el mensaje anterior. Normalmente, esto no afectará a tu aplicación.
Además, el callback $fail
ahora devuelve un objeto. Si anteriormente estabas haciendo type-hinting al tipo de retorno de tu cierre de validación, es posible que necesites actualizar tu type-hint:
public function rules(){ 'name' => [ function ($attribute, $value, $fail) { $fail('validation.translation.key')->translate(); }, ],}
Probabilidad de Impacto: Muy Baja
Dentro de las solicitudes de formularios, el método after
ahora está reservado por Laravel. Si tus solicitudes de formularios definen un método after
, el método debería cambiarse de nombre o modificarse para utilizar la nueva característica de "después de la validación" de Laravel en las solicitudes de formularios.
También te animamos a ver los cambios en el repositorio de GitHub de laravel/laravel
. Si bien muchos de estos cambios no son obligatorios, es posible que desees mantener estos archivos sincronizados con tu aplicación. Algunos de estos cambios se tratarán en esta guía de actualización, pero otros, como cambios en archivos de configuración o comentarios, no lo harán.
Puedes ver fácilmente los cambios con la herramienta de comparación de GitHub y elegir qué actualizaciones son importantes para ti. Sin embargo, muchos de los cambios mostrados por la herramienta de comparación de GitHub se deben a la adopción de tipos nativos de PHP por nuestra organización. Estos cambios son compatibles con versiones anteriores y la adopción de ellos durante la migración a Laravel 10 es opcional.