Laravel Actualizaciones: fecha de lanzamiento y nuevas funciones

Laravel 12

NUEVO Laravel 12: Sin nuevas características (¡Y eso es GENIAL!) Primer vistazo Nuevo kit de inicio

⚙️ De Laravel 11 a Laravel 12: cómo actualizar

Obviamente, el salto es de la versión 11 a la 12, y lo primero que muchos se preguntan es cómo hacer la actualización.

Para ello, basta con modificar las siguientes líneas en tu archivo composer.json:

laravel/framework to ^12.0
phpunit/phpunit to ^11.0
pestphp/pest to ^3.0

Con eso ya puedes saber si hay cambios importantes o no. Si revisas la sección de Upgrade en la documentación (puedes buscar “Laravel 11 to 12 upgrade”), verás que se trata de una actualización con pocos cambios.

💤 Actualización con pocos cambios (o “actualización aburrida”)

Laravel 12 es lo que podríamos llamar una actualización aburrida:
no hay grandes cambios ni nuevas características disruptivas.

El código de Laravel 11 es totalmente compatible con Laravel 12, por lo que no deberías preocuparte por romper tu aplicación.

La única excepción podría ser en los paquetes externos, si estos aún no se han actualizado para soportar Laravel 12. En ese caso, habrá que esperar a que los desarrolladores los adapten

Hablamos sobre Jetstream a partir de la versión de Laravel 12

⚙️ Diferencias entre Laravel 11 y Laravel 12

Antes de seguir avanzando, quiero explicar otro concepto que considero muy importante.
Como te he comentado, si seguiste mi curso básico de Laravel o simplemente buscaste en internet el curso de Laravel Base, notarás que el cambio entre Laravel 11 y Laravel 12 —que es la última versión a la fecha— es mínimo en lo que respecta a la codificación.

Un proyecto puede actualizarse fácilmente de la versión 11 a la 12.
Simplemente debes ir a la carpeta del archivo composer.json, reemplazar la versión 11 por 12, ejecutar un composer update y listo: tendrás tu proyecto actualizado.

La codificación se mantiene totalmente compatible, ya que Laravel 12 incluye cambios de forma, pero no de fondo. Es decir, las modificaciones se centran en la estructura y la organización, no en la lógica base del framework.
Esto es algo que ya comenté tanto en la clase anterior como en el curso de Laravel Base.

🚫 Jetstream desaparece en Laravel 12

Uno de los cambios más importantes entre Laravel 11 y Laravel 12 es la desaparición del paquete Jetstream.

En Laravel 11, Jetstream ofrecía funcionalidades avanzadas como:

Gestión de API Tokens.

Sistemas de equipos (similar a la gestión de roles).

Varias características enfocadas en autenticación y organización de usuarios.

Sin embargo, en Laravel 12, Jetstream ya no está disponible, y es por eso que ahora encontramos una interfaz más simple y ligera, enfocada en la base del framework sin dependencias adicionales.

🧩 Descripción SEO optimizada

Laravel 12 introduce cambios mínimos en el código respecto a Laravel 11, pero elimina el paquete Jetstream, simplificando la estructura del framework. Aprende cómo actualizar tu proyecto de Laravel 11 a 12 fácilmente con Composer y descubre qué implica la desaparición de Jetstream en las nuevas versiones.

Un vistazo a lo que viene con Laravel 11

Laravel 11 no está programado para lanzarse hasta el primer trimestre de 2024, pero se han compartido algunas características nuevas y Taylor presenta algunas mejoras nuevas importantes en su discurso de apertura de Laracon.

Estructura de directorio optimizada

Hasta ahora, esto es sólo una vista previa beta. Es posible que cambien, pero a partir de ahora, esto es lo que puede esperar...

Los controladores ya no amplían nada de forma predeterminada.

No más directorio de middleware. Actualmente, Laravel incluye nueve middleware y muchos de ellos nunca los personalizarías. Sin embargo, si desea personalizarlos, se mueve a la aplicación/proveedor de servicios. Por ejemplo:

public function boot(): void
{
   EncryptCookies::except(['some_cookie']);
}

No más HTTP/Kernel

La mayoría de las cosas que antes podías hacer en el Kernel, ahora puedes hacerlas en Bootstrap/App.

return Application::configure()
   ->withProviders ()
   -›withRouting(
       web: __DIR__.'/../routes/web.php'
       commands: __DIR__.'/../routes/console.php',
   )
   ->withMiddleware(function(Middleware Smiddleware) {
       $middleware->web(append: LaraconMiddleware::class):
   })

Cambios en el modelo

Las conversiones de modelos ahora se definen como un método en lugar de una propiedad. Cuando se define como un método, podemos hacer otras cosas, como llamar a otros métodos directamente desde las conversiones. Aquí hay un ejemplo que utiliza una nueva AsEnumCollection de Laravel 11:

protected function casts(): array
{
   return [
       'email_verified_at' => 'datetime',
       'password' => 'hashed',
       'options'=› AsEnumCollection::of(UserOption::class),
   ];
}

Nuevo Dumpable Trait

Esto tiene como objetivo optimizar el núcleo del marco, ya que actualmente varias clases tienen métodos "dd" o "dump". Además, puedes usar el trait Dumpable en tus propias clases:

class Stringable implements JsonSerializable, ArrayAccess
{
   use Conditionable, Dumpable, Macroable, Tappable;

   str('foo')->dd();
   str('foo')->dump();

Cambios de configuración

Laravel tiene muchos archivos de configuración, Laravel 11 los elimina y todas las opciones de configuración caen en cascada. El .env se ha ampliado para incluir todas las opciones que desee configurar.

Para combinar con esto, hay un nuevo comando config:publish para que pueda recuperar cualquier configuración que desee. Incluso si las recupera, la nueva función de cascada le permite eliminar todas las opciones que no desea personalizar.

Migraciones predeterminadas reducidas

Cuando inicias una nueva aplicación Laravel, viene con algunas migraciones predeterminadas de 2014 y 2019. Ahora vendrán con las fechas eliminadas y trasladadas a solo dos archivos.

Cambios de rutas

De forma predeterminada, sólo habrá dos archivos de ruta, console.php y web.php. Las rutas API ahora se habilitarán a través de php artisan install:api, brindándole el archivo de rutas API y Laravel Sanctum.

Lo mismo ocurre con la transmisión websocket, instalación artesanal de php: transmisión.

Kernel de consola eliminado

El kernel de la consola se está eliminando y, en su lugar, podrá definir los comandos de su consola directamente en route/console.php.

Named Arguments

Los argumentos con nombre no están cubiertos por las pautas de compatibilidad con versiones anteriores de Laravel. Podemos optar por cambiar el nombre de los argumentos de la función cuando sea necesario para mejorar el código base de Laravel. Por lo tanto, el uso de argumentos con nombre al llamar a métodos de Laravel debe hacerse con cautela y entendiendo que los nombres de los parámetros pueden cambiar en el futuro.

Eager Load Limit

Laravel 11 integra el código detrás del paquete "límite de carga ansiosa":

User::select('id', 'name')->with([
   'articles' => fn($query) => $query->limit(5)
])->get();

Soporte mínimo de PHP 8.2

Esta fue una decisión temprana, pero las aplicaciones de Laravel 11 requieren un mínimo de PHP 8.2. Si está ejecutando una versión anterior de PHP, ahora es un buen momento para actualizarla.

https://laravel-news.com/laravel-11

Laravel, el marco PHP en constante evolución, ha sido sinónimo de excelencia en desarrollo web durante años. Su estructura modular, su arquitectura MVC y su extensa documentación lo han convertido en el favorito de los desarrolladores.

El próximo lanzamiento de Laravel 11 ha generado oleadas de entusiasmo en la escena del desarrollo.

Desde experiencias de desarrollo optimizadas hasta optimizaciones de rendimiento mejoradas, Laravel 11 promete ampliar los límites del desarrollo web y desbloquear una era completamente nueva de posibilidades.

A continuación, exploraremos las nuevas y emocionantes funciones y actualizaciones que le esperan en este framework revolucionario.

¿Cuándo se lanzará Laravel 11?

Laravel sigue un calendario de lanzamiento predecible. Las versiones principales con posibles cambios importantes se publican anualmente (alrededor del primer trimestre), mientras que las actualizaciones menores y de parches llegan semanalmente y nunca interrumpen la compatibilidad.

Con base en este patrón, se espera que Laravel 11 se lance en febrero de 2024, durante el primer trimestre.

¿Cómo instalar Laravel 11?

Si bien Laravel 11 aún no está disponible oficialmente, aún puedes explorar sus funciones de vanguardia instalando la versión de desarrollo. Así es cómo:

1. Usando el instalador de Laravel

Abra su terminal y ejecute este comando:

nuevo nombre de proyecto laravel --dev

Este comando recupera el código más reciente de la rama maestra del repositorio de Laravel, dándole una idea de lo que vendrá en Laravel 11.

2. Usar Composer directamente

Si prefieres Composer, utiliza este comando en su lugar:

compositor crear-proyecto --prefer-dist laravel/laravel nombre del proyecto dev-master

Este enfoque también lo configura con la versión de desarrollo de Laravel 11.

Laravel 11: últimas funciones y actualizaciones

Laravel 11 aún está en desarrollo, pero hay algunas características y actualizaciones interesantes que podemos esperar basadas en el acceso temprano y las solicitudes de extracción fusionadas. 

Aquí hay un vistazo de lo que vendrá con Laravel 11

Laravel 11 presenta una aplicación Skeleton más delgada y elegante que prioriza la eficiencia y el minimalismo del código. Este esqueleto minimalista permite a los desarrolladores comenzar a construir más rápido y con menos desorden. Los cambios clave incluyen:

Proveedores de servicios, middleware y archivos de configuración drásticamente reducidos, y la personalización ahora se maneja principalmente dentro del nuevo archivo bootstrap/app.php.
Descubrimiento automático de políticas y eventos, eliminando el registro manual.
Actualizaciones del modelo de usuario y eliminación de "Sanctum" de forma predeterminada, lo que ofrece un punto de partida más limpio.
Las variables de entorno se ampliaron y cambiaron de nombre para mayor claridad, y la conexión de cola predeterminada se estableció en la base de datos.
Migraciones consolidadas y actualizadas para configuraciones permanentes.

Soporte eliminado para PHP 8.1

Laravel 11 está causando sensación en el mundo del desarrollo web con su audaz decisión de superar PHP 8.1 y admitir directamente las próximas versiones, 8.2 y 8.3.

Este movimiento con visión de futuro señala el compromiso de Laravel de mantenerse a la vanguardia de la tecnología PHP, dejando atrás las iteraciones pasadas para las emocionantes posibilidades del futuro.

En lugar de empantanarse con preocupaciones de compatibilidad para una versión de PHP ya establecida, Laravel 11 fija su mirada en el horizonte al adoptar las nuevas características y mejoras de rendimiento que 8.2 y 8.3 tienen para ofrecer.

Esto permite a los desarrolladores utilizar los últimos avances en PHP desde el principio y crear aplicaciones web más limpias, rápidas y eficientes.

Soporte agregado para carga ansiosa con límite

No era posible utilizar los métodos de creación de consultas "limitar" y "tomar" al restringir las cargas ansiosas. Ahora está arreglado en Laravel 11:

User::with(['posts' => function ($query) {
    $query->latest()->limit(10);
}])->get();

Articulo original:

https://bsuperiorsystem.com/blog/laravel-11/?utm_source=website&utm_medium=referal&utm_campaign=benjamincrozat&utm_id=benjamincrozat&utm_content=profile+link&utm_source=laravelnews&utm_medium=link&utm_campaign=laravelnews

Reversibles Form Prompts y un nuevo Facade de excepciones en Laravel 11.4

This week, the Laravel team released v11.4, with reversible form Prompts, a new Exceptions facade, Enum support in the Collection::mapInto() method, and more.

Exceptions Facade

Nuno Maduro contributed the Exceptions facade:

Los Facades de Excepciones proporciona una forma consistente de probar excepciones en aplicaciones Laravel. Aquí está la lista de métodos que proporciona los Facades de Excepciones:

assertReported
assertReportedCount
assertNotReported
assertNothingReported
throwOnReport
throwFirstReported

Aquí hay un ejemplo de la descripción de la solicitud de extracción que ilustra el método Exceptions::fake() y el método assertReported():

use Illuminate\Support\Facades\Exceptions;

test('example', function () {
   Exceptions::fake();

   $this->post('/generate-report', [
       'throw' => 'true',
   ])->assertStatus(503); // Service Unavailable

   Exceptions::assertReported(ServiceUnavailableException::class);

   // or
   Exceptions::assertReported(function (ServiceUnavailableException $exception) {
       return $exception->getMessage() === 'Service is currently unavailable';
   });
});
See the Exception Handling section of the HTTP Tests documentation for usage details.

La capacidad de utilizar directivas de estilo booleano, sin ningún valor definido:

{{-- Before  --}}

<x-fetch wire:poll />

{{-- Generates this HTML --}}

<div ... wire:poll="wire:poll" />

{{-- After  --}}
<x-fetch wire:poll />

<div ... wire:poll />

Reversible Forms in Prompts

Son un conjunto agrupado de mensajes que el usuario debe completar. Los formularios incluyen la capacidad de regresar a indicaciones anteriores y realizar cambios sin tener que cancelar el comando y comenzar de nuevo:

use function Laravel\Prompts\form;

$responses = form()
   ->text('What is your name?', required: true)
   ->password('What is your password?', validate: ['password' => 'min:8'])
   ->confirm('Do you accept the terms?')
   ->submit();
Here's an example of using values from previous responses:
$responses = form()
   ->text('What is your name?', name: 'name')
   ->add(fn () => select('What is your favourite language?', ['PHP', 'JS']), name: 'language')
   ->add(fn ($responses) => note("Your name is {$responses['name']} and your language is {$responses['language']}"))
   ->submit();

Agregar soporte para enumedados en el método de mapInto Collection

Contribuyó con soporte para Enums en el método Collection::mapInto(), que le permite crear enumeraciones a partir de una serie de valores:

public function store(Request $request)
{
   $request->validate([
       'features' => ['array'],
       'features.*' => [new Enum(Feature::class)],
   ]);

   $features = $request
       ->collect('features')
       ->mapInto(Feature::class);

   if ($features->contains(Feature::DarkMode)) {
       // ...
   }
}

afterQuery() Hook

Hook afterQuery() para ejecutar código después de ejecutar una consulta:

$query->afterQuery(function ($models) {
   // Make changes to the queried models ...
});

Aquí hay un ejemplo de caso de uso de la descripción de la pull request's:

public function scopeWithIsFavoriteOf($query, ?User $user = null) : void
{
   if ($user === null) {
       return $query;
   }

   $query->addSelect([
       // 'is_favorite' => some query ...
   ]);
}

$products = Product::withIsFavoriteOf(auth()->user())->get();

if (auth()->user() === null) {
   $products->each->setAttribute('is_favorite', false);
}

Y aquí está el código que utiliza el hook afterQuery():

public function scopeWithIsFavoriteOf($query, ?User $user = null) : void
{
   if ($user === null) {
       $query->afterQuery(fn ($products) => $products->each->setAttribute('is_favorite', false));

       return;
   }

   $query->addSelect([
       // 'is_favorite' => some query ...
   ]);
}

Product::withIsFavoriteOf(auth()->user())->get();

Artículo original:

https://laravel-news.com/laravel-11-4-0

¿Cuándo se lanzará Laravel 10?

Laravel 10 está programado para ser lanzado el 7 de febrero de 2023.

¿Cómo instalar Laravel 10?

Instalar Laravel 10 es fácil. El instalador de Laravel tiene un indicador --dev, que instala la rama principal desde el repositorio laravel/laravel.

Nuevas características y cambios en Laravel 10

Soporte eliminado para PHP 8.0

Algunas personas apenas están adoptando PHP 8.0. Mientras tanto, Laravel 10 dejará de ser compatible con PHP 8.0, y eso es bueno.

Recuerde: las aplicaciones de las grandes empresas no necesitan actualizarse a las mejores y más recientes tan pronto como se publiquen. Las aplicaciones empresariales tienen clientes o empleados pagados que dependen de ellos para hacer su trabajo. Necesitan avanzar de forma lenta pero segura mediante la realización de pruebas exhaustivas.

Soporte eliminado para Predis v1

Si está forzando el uso de Predis v1 en su proyecto, es posible que desee actualizar a v2.

Para ver qué cambió en Predis v2, eche un vistazo al registro de cambios.

dispatchNow() ha sido eliminado

dispatchNow() es un método popular en Laravel. Quedó en desuso en Laravel 9 a favor de dispatchSync(). Laravel 10 lo eliminará, así que asegúrese de buscarlo y reemplazarlo en todos sus proyectos. Puede ser un cambio radical, pero es una solución extremadamente fácil.

Se han eliminado muchos métodos y propiedades en desuso.

Lanzar una versión principal también significa que el equipo de Laravel finalmente puede eliminar las funciones que han quedado obsoletas en Laravel 9. También significa que debe probar cuidadosamente cualquier aplicación de Laravel que desee migrar a la versión 10.

Aquí hay una lista de todos los relaciones públicas que se encargan de eso:

Laravel 10 usa reglas de validación invocables por defecto

En Laravel 9, las reglas de validación invocables podrían generarse usando el indicador --invokable con el comando php artisan make:rule. A partir de Laravel 10, ya no lo necesitarás.

php artisan make:rule Uppercase

Para recordarle un poco qué son las reglas de validación invocables, así es como se ven:

namespace App\Rules;
use IlluminateContractsValidationInvokableRule;
class Uppercase implements InvokableRule
{
    /**
     * Run the validation rule.
     *
     * @param string $attribute
     * @param mixed $value
     * @param Closure(string): IlluminateTranslationPotentiallyTranslatedString $fail
     * @return void
     */
    public function __invoke($attribute, $value, $fail)
    {
        if (strtoupper($value) !== $value) {
            $fail('The :attribute must be uppercase.');
        }

Laravel 10 usa tipos

A partir de Laravel 10, el esqueleto ahora usará tipos nativos en lugar de docblocks. 

Por ejemplo, en el esqueleto de Laravel, el método schedule() en app/Console/Kernel.php se verá así:

/**
 * Define the application's command schedule.
- * 
- * @param  IlluminateConsoleSchedulingSchedule  $schedule 
- * @return void 
 */
- protected function schedule($schedule)
+ protected function schedule(Schedule $schedule): void

https://medium.com/@benjamincrozat/laravel-10-release-date-and-new-features-69574b4a1a4a

Acepto recibir anuncios de interes sobre este Blog.

Hablamos sobre las principales características de actualizaciones de Laravel que salen todos los años a partir de las versiones mayores.

| 👤 Andrés Cruz