NOVEDADES LARAVEL 13

Laravel 13 aún no ha sido lanzado oficialmente.Según la política oficial de soporte de Laravel está programado para marzo de 2026. Es una versión que se encuentra en fase final de desarrollo / release candidate en estos momentos, por lo que las características definitivas están casi cerradas, aunque podrían añadirse pequeños ajustes de última hora.
Requisitos mínimos: PHP 8.3 como versión mínima.

Novedades más destacadas

  1. Soporte nativo para PHP Attributes (el cambio más importante para el día a día del desarrollador): Ahora se pueden configurar muchos aspectos usando atributos en lugar de propiedades de clase. Es retro compatible (las propiedades clásicas siguen funcionando). Ejemplos con modelos de Eloquent:

    use Laravel\Attributes\Table;
    use Laravel\Attributes\Fillable;
    use Laravel\Attributes\Hidden;
    use Laravel\Attributes\Visible;
    use Laravel\Attributes\Unguarded;
    use Laravel\Attributes\Touches;
    
    #[Table('articulos')]
    #[Fillable(['titulo', 'contenido', 'slug'])]
    #[Hidden(['password', 'remember_token'])]
    #[Visible(['id', 'titulo', 'created_at'])]
    #[Unguarded]           // o #[Guarded(['id'])]
    #[Touches('comentarios')]
    class Articulo extends Model
    {
        // ...
    }
    
  2. Driver nativo de base de datos para Laravel Reverb (el servidor WebSocket oficial). Facilita enormemente el escalado horizontal de aplicaciones real-time (chat, notificaciones en vivo, etc.) en entornos con balanceo de carga.
  3. Cache::touch($key) Nuevo método para extender el TTL de un ítem en caché sin tener que leerlo ni re-escribirlo:

    Cache::touch('stats_dashboard', now()->addHour());
    
  4. Mejoras menores pero prácticas
    • Orden inteligente en rutas con subdominios (subdomain routing priority).
    • Restricciones para evitar instanciar modelos durante el método boot() (mejora seguridad y evita bugs raros).
    • Varias optimizaciones internas de rendimiento y limpieza de código legacy gracias al salto a PHP 8.3.
Extender el TTL significa darle más vida al ítem ya cacheado, actualizando solo su fecha de caducidad, sin tocar el valor.
Antes de Laravel 13, para "extender" se tenía que hacer algo como esto (ineficiente):

$valor = Cache::get('clave_importante');
if ($valor !== null) {
    Cache::put('clave_importante', $valor, now()->addHour());  // Lees + escribes de nuevo
}
Con Laravel 13 se hace de la siguiente manera:

Cache::touch('clave_importante', now()->addHours(2));  
// O con Carbon:
Cache::touch('reporte_ventas', now()->addDay());

// O indefinidamente (nunca caduca mientras exista):
Cache::touch('config_global', null);