Estamos actualizando el sitio. Durante unos días es posible que veas fallos de diseño o de traducción. La documentación sigue disponible: si una página se ve mal, recárgala más tarde.

Inicio Laravel 10.x Guía de Actualización

Guía de Actualización

10.x 7 de mar. de 2026

#Cambios de Alto Impacto

#Cambios de Impacto Medio

#Cambios de Bajo Impacto

#Actualización a 10.0 desde 9.x

#Tiempo Estimado de Actualización: 10 Minutos

Примечание

Intentamos documentar todos los posibles cambios incompatibles. Dado que algunos de estos cambios están en partes poco comunes del framework, solo una parte de ellos puede afectar realmente a su aplicación. ¿Quiere ahorrar tiempo? Puede usar Laravel Shift para ayudar a automatizar las actualizaciones de su aplicación.

#Actualización de Dependencias

Probabilidad de Impacto: Alta

#Requisito PHP 8.1.0

Laravel ahora requiere PHP 8.1.0 o superior.

#Requisito Composer 2.2.0

Laravel ahora requiere Composer 2.2.0 o superior.

#Dependencias de Composer

Debe actualizar las siguientes dependencias en el archivo composer.json de su aplicación:

  • laravel/framework a ^10.0
  • laravel/sanctum a ^3.2
  • doctrine/dbal a ^3.0
  • spatie/laravel-ignition a ^2.0
  • laravel/passport a ^11.0 (Guía de Actualización)
  • laravel/ui a ^4.0

Si está actualizando a Sanctum 3.x desde la serie 2.x, consulte la guía de actualización de Sanctum.

Además, si desea usar PHPUnit 10, debe eliminar el atributo processUncoveredFiles de la sección <coverage> en el archivo de configuración phpunit.xml de su aplicación. Luego, actualice las siguientes dependencias en el archivo composer.json de su aplicación:

  • nunomaduro/collision a ^7.0
  • phpunit/phpunit a ^10.0

Finalmente, revise cualquier otro paquete de terceros que use su aplicación y verifique que está utilizando la versión adecuada para el soporte de Laravel 10.

#Estabilidad Mínima

Debe actualizar la configuración minimum-stability en el archivo composer.json de su aplicación a stable. O, dado que el valor predeterminado de minimum-stability es stable, puede eliminar esta configuración del archivo composer.json de su aplicación:

"minimum-stability": "stable",

#Aplicación

#Binding de Public Path

Probabilidad de Impacto: Baja

Si su aplicación personaliza su "public path" vinculando path.public en el contenedor, debe actualizar su código para invocar el método usePublicPath que ofrece el objeto Illuminate\Foundation\Application:

app()->usePublicPath(__DIR__.'/public');

#Autorización

#Método registerPolicies

Probabilidad de Impacto: Baja

El método registerPolicies del AuthServiceProvider ahora es invocado automáticamente por el framework. Por lo tanto, puede eliminar la llamada a este método desde el método boot de su AuthServiceProvider.

#Caché

#Etiquetas de Caché en Redis

Probabilidad de Impacto: Media

El uso de Cache::tags() solo se recomienda para aplicaciones que usan Memcached. Si está usando Redis como driver de caché, debería considerar migrar a Memcached o actualizar su aplicación a Laravel 12.30.0.

#Base de Datos

#Expresiones de Base de Datos

Probabilidad de Impacto: Media

Las "expresiones" de base de datos (normalmente generadas vía DB::raw) han sido reescritas en Laravel 10.x para ofrecer funcionalidad adicional en el futuro. Notablemente, el valor raw de la gramática debe ahora obtenerse mediante el método getValue(Grammar $grammar) de la expresión. Ya no se soporta convertir una expresión a string usando (string).

Normalmente, esto no afecta a las aplicaciones finales; sin embargo, si su aplicación convierte manualmente expresiones de base de datos a strings usando (string) o invoca directamente el método __toString en la expresión, debe actualizar su 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());

#Constructor de Query Exception

Probabilidad de Impacto: Muy Baja

El constructor de Illuminate\Database\QueryException ahora acepta un nombre de conexión string como primer argumento. Si su aplicación lanza esta excepción manualmente, debe ajustar su código en consecuencia.

#Columnas ULID

Probabilidad de Impacto: Baja

Cuando las migraciones invocan el método ulid sin argumentos, la columna ahora se nombrará ulid. En versiones anteriores de Laravel, invocar este método sin argumentos creaba una columna erróneamente llamada uuid:

$table->ulid();

Para especificar explícitamente un nombre de columna al invocar el método ulid, puede pasar el nombre de la columna al método:

$table->ulid('ulid');

#Eloquent

#Propiedad "Dates" del Modelo

Probabilidad de Impacto: Media

La propiedad obsoleta $dates del modelo Eloquent ha sido eliminada. Su aplicación debe usar ahora la propiedad $casts:

protected $casts = [
    'deployed_at' => 'datetime',
];

#Localización

#El Directorio de Idiomas

Probabilidad de Impacto: Ninguna

Aunque no es relevante para aplicaciones existentes, el esqueleto de aplicación Laravel ya no contiene el directorio lang por defecto. En cambio, al crear nuevas aplicaciones Laravel, puede publicarse usando el comando Artisan lang:publish:

php artisan lang:publish

#Registro (Logging)

#Monolog 3

Probabilidad de Impacto: Media

La dependencia Monolog de Laravel ha sido actualizada a Monolog 3.x. Si interactúa directamente con Monolog en su aplicación, debe revisar la guía de actualización de Monolog.

Si usa servicios de logging de terceros como BugSnag o Rollbar, puede que necesite actualizar esos paquetes a una versión que soporte Monolog 3.x y Laravel 10.x.

#Colas (Queues)

#Método Bus::dispatchNow

Probabilidad de Impacto: Baja

Los métodos obsoletos Bus::dispatchNow y dispatch_now han sido eliminados. En su lugar, su aplicación debe usar los métodos Bus::dispatchSync y dispatch_sync, respectivamente.

#Valor de Retorno del Helper dispatch()

Probabilidad de Impacto: Baja

Invocar dispatch con una clase que no implemente Illuminate\Contracts\Queue anteriormente devolvía el resultado del método handle de la clase. Ahora devolverá una instancia de Illuminate\Foundation\Bus\PendingBatch. Puede usar dispatch_sync() para replicar el comportamiento anterior.

#Routing

#Alias de Middleware

Probabilidad de Impacto: Opcional

En nuevas aplicaciones Laravel, la propiedad $routeMiddleware de la clase App\Http\Kernel ha sido renombrada a $middlewareAliases para reflejar mejor su propósito. Puede renombrar esta propiedad en sus aplicaciones existentes, pero no es obligatorio.

#Valores de Retorno del Rate Limiter

Probabilidad de Impacto: Baja

Al invocar el método RateLimiter::attempt, el valor retornado por el closure proporcionado será ahora el valor retornado por el método. Si no se retorna nada o null, el método attempt devolverá true:

$value = RateLimiter::attempt('key', 10, fn () => ['example'], 1);

$value; // ['example']

#Método Redirect::home

Probabilidad de Impacto: Muy Baja

El método obsoleto Redirect::home ha sido eliminado. En su lugar, su aplicación debe redirigir a una ruta nombrada explícitamente:

return Redirect::route('home');

#Testing

#Simulación de Servicios

Probabilidad de Impacto: Media

El trait obsoleto MocksApplicationServices ha sido eliminado del framework. Este trait proporcionaba métodos de testing como expectsEvents, expectsJobs y expectsNotifications.

Si su aplicación usa estos métodos, recomendamos que migre a Event::fake, Bus::fake y Notification::fake, respectivamente. Puede aprender más sobre simulación mediante fakes en la documentación correspondiente al componente que desea simular.

#Validación

#Mensajes de Reglas de Validación con Closure

Probabilidad de Impacto: Muy Baja

Al escribir reglas de validación personalizadas basadas en closure, invocar el callback $fail más de una vez ahora agregará los mensajes a un array en lugar de sobrescribir el mensaje anterior. Normalmente, esto no afectará su aplicación.

Además, el callback $fail ahora retorna un objeto. Si antes indicaba el tipo de retorno de su closure de validación, puede que necesite actualizar su type-hint:

public function rules()
{
    'name' => [
        function ($attribute, $value, $fail) {
            $fail('validation.translation.key')->translate();
        },
    ],
}

#Mensajes de Validación y Reglas Closure

Probabilidad de Impacto: Muy Baja

Antes, podía asignar un mensaje de error a una clave diferente proporcionando un array al callback $fail inyectado en reglas de validación basadas en Closure. Ahora debe proporcionar la clave como primer argumento y el mensaje de error como segundo argumento:

Validator::make([
    'foo' => 'string',
    'bar' => [function ($attribute, $value, $fail) {
        $fail('foo', 'Something went wrong!');
    }],
]);

#Método After en Form Request

Probabilidad de Impacto: Muy Baja

Dentro de los form requests, el método after ahora está reservado por Laravel. Si sus form requests definen un método after, debe renombrarlo o modificarlo para usar la nueva funcionalidad de "after validation" de los form requests de Laravel.

#Misceláneos

También le recomendamos revisar los cambios en el repositorio GitHub de laravel/laravel. Aunque muchos de estos cambios no son obligatorios, puede que desee mantener estos archivos sincronizados con su aplicación. Algunos de estos cambios se cubrirán en esta guía de actualización, pero otros, como cambios en archivos de configuración o comentarios, no.

Puede ver fácilmente los cambios con la herramienta de comparación de GitHub y elegir qué actualizaciones son importantes para usted. Sin embargo, muchos de los cambios mostrados por esta herramienta se deben a la adopción de tipos nativos de PHP por parte de nuestra organización. Estos cambios son compatibles hacia atrás y su adopción durante la migración a Laravel 10 es opcional.