07/08La actualización a Laravel 13Rector con el set de Laravel 13: PreventRequestForgery y propiedades a atributos
0%Tu lecturaQuedan 20 min
Lección 7 de 8· La actualización a Laravel 13
Rector con el set de Laravel 13: PreventRequestForgery y propiedades a atributos
20 min de lecturaLaravel 13
Hola, bienvenido. En esta lección vamos a pasar Rector con el set de Laravel 13 de rector-laravel. En este proyecto propone 2 tipos de cambio: renombrar la referencia a ValidateCsrfToken de config/sanctum.php a PreventRequestForgery, y pasar las propiedades de los modelos y del comando tickets:close-stale a atributos de PHP, como #[Fillable] o #[Signature].
El primero es el que dejamos pendiente en la lección 5. El segundo es opcional, porque cambia el estilo del código y no su comportamiento, así que vamos a ver qué propone antes de decidir.
01
Lo que propone Rector con Laravel 13 instalado
rector.php no cambia: el set basado en Composer ya incluye las reglas de Laravel 13, y cada una comprueba la versión de laravel/framework instalada antes de actuar. Las de atributos, por ejemplo, solo se activan desde Laravel 13, porque los atributos no existen en versiones anteriores, y por eso el --dry-run de la lección 3 no propuso nada. Vamos a ver qué propone ahora, sin aplicar nada:
Terminal
$ sail bin rector --dry-run
Salida
6 files with changes
====================
1) config/sanctum.php:80
---------- begin diff ----------
@@ Line 80 @@
'middleware' => [
'authenticate_session' => AuthenticateSession::class,
'encrypt_cookies' => EncryptCookies::class,
- 'validate_csrf_token' => ValidateCsrfToken::class,
+ 'validate_csrf_token' => \Illuminate\Foundation\Http\Middleware\PreventRequestForgery::class,
],
];
----------- end diff -----------
Applied rules:
* RenameClassRector
2) app/Console/Commands/CloseStaleTickets.php:6
---------- begin diff ----------
@@ Line 6 @@
use App\Models\Ticket;
use Illuminate\Console\Command;
+#[\Illuminate\Console\Attributes\Description('Cierra los tickets que llevan días esperando una respuesta del cliente')]
+#[\Illuminate\Console\Attributes\Signature('tickets:close-stale {--days=7 : Días sin respuesta del cliente}')]
class CloseStaleTickets extends Command
{
- protected $signature = 'tickets:close-stale {--days=7 : Días sin respuesta del cliente}';
-
- protected $description = 'Cierra los tickets que llevan días esperando una respuesta del cliente';
-
public function handle(): int
{
$stale = Ticket::query()
----------- end diff -----------
Applied rules:
* DescriptionPropertyToDescriptionAttributeRector
* SignaturePropertyToSignatureAttributeRector
...
4) app/Models/Ticket.php:14
---------- begin diff ----------
@@ Line 14 @@
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
+#[\Illuminate\Database\Eloquent\Attributes\Appends([
+ 'hours_left',
+])]
+#[\Illuminate\Database\Eloquent\Attributes\Fillable([
+ 'subject',
+ 'body',
+ 'status',
+ 'priority',
+ 'estimated_hours',
+ 'due_at',
+])]
class Ticket extends Model
{
use HasFactory, HasUuids;
-
- protected $fillable = [
- 'subject',
- 'body',
- 'status',
- 'priority',
- 'estimated_hours',
- 'due_at',
- ];
-
- protected $appends = [
- 'hours_left',
- ];
/**
* @return BelongsTo<User, $this>
----------- end diff -----------
Applied rules:
* AppendsPropertyToAppendsAttributeRector
* FillablePropertyToFillableAttributeRector
...
6) app/Models/User.php:10
---------- begin diff ----------
@@ Line 10 @@
use Laravel\Sanctum\HasApiTokens;
use Spatie\Permission\Traits\HasRoles;
+#[\Illuminate\Database\Eloquent\Attributes\Fillable([
+ 'name',
+ 'email',
+ 'password',
+])]
+#[\Illuminate\Database\Eloquent\Attributes\Hidden([
+ 'password',
+ 'remember_token',
+])]
class User extends Authenticatable implements MustVerifyEmail
{
use HasApiTokens, HasFactory, HasRoles, Notifiable;
-
- /**
- * The attributes that are mass assignable.
- *
- * @var list<string>
- */
- protected $fillable = [
- 'name',
- 'email',
- 'password',
- ];
-
- /**
- * The attributes that should be hidden for serialization.
- *
- * @var list<string>
- */
- protected $hidden = [
- 'password',
- 'remember_token',
- ];
/**
* @return HasMany<Ticket, $this>
----------- end diff -----------
Applied rules:
* FillablePropertyToFillableAttributeRector
* HiddenPropertyToHiddenAttributeRector
[OK] 6 files would have been changed (dry-run) by Rector
6 archivos, y nos hemos saltado 2 en la salida, Attachment y TicketReply, que solo cambian $fillable, igual que Ticket. Las reglas que se aplican son de 2 tipos, y conviene separarlos, porque no tienen el mismo peso:
Renombrado del middleware
Propiedades a atributos
Qué hace
Cambia las referencias a VerifyCsrfToken y ValidateCsrfToken por PreventRequestForgery
Cambia $fillable, $hidden, $appends, $signature y $description por #[Fillable], #[Hidden], #[Appends], #[Signature] y #[Description]
En el proyecto
config/sanctum.php
Los 4 modelos y el comando tickets:close-stale
Por qué
Los nombres anteriores son alias obsoletos
Es la forma que usa la documentación de Laravel 13
¿Cambia el comportamiento?
No, el alias hereda de la clase nueva
No, Laravel 13 sigue leyendo las propiedades
¿Se puede dejar fuera?
Se puede, pero algún día el alias desaparecerá
Sí, es una decisión de estilo
En rector-laravel, los 2 tipos son 2 partes del set de Laravel 13: la primera es un renombrado de clases y la segunda reúne todas las reglas de atributos de modelos, comandos, jobs, form requests y API resources. En este proyecto solo encuentran modelos y un comando.
Lo que queda de esta lección
02PreventRequestForgery en config/sanctum.php
03Las propiedades de los modelos y del comando, a atributos
04Aplicar, Pint y composer qa en verde
Sigue leyendo con tu suscripciónEl curso completo, con el certificado y el foro, está incluido en la suscripción.Ver los planes¿Ya tienes cuenta? Entra
Usamos cookies propias necesarias para que la plataforma funcione y, solo con tu permiso, cookies de analítica para entender cómo se usa la web. No usamos cookies publicitarias.
Más información.
Preferencias de cookies
Elige qué cookies quieres permitir. Puedes cambiarlo cuando quieras.
NecesariasImprescindibles para iniciar sesión, recordar tu sesión y proteger los formularios. No se pueden desactivar.
Siempre activas
Google Analytics, para medir de forma agregada cómo se usa la plataforma y mejorarla.