Propiedades bloqueadas en Livewire

  • Publicado el 12 agosto, 2024
  • Palabras: 359

Las propiedades de Livewire se pueden modificar libremente tanto en el frontend como en el backend mediante utilidades como wire:model. Si desea evitar que una propiedad (como el ID de un modelo) se modifique en el frontend, puede usar el atributo #[Locked] de Livewire.

Propiedades bloqueadas en Livewire

#Uso básico

 

A continuación se muestra un componente ShowPost que almacena el ID de un modelo de Post como una propiedad pública denominada $id. Para evitar que un usuario curioso o malintencionado modifique esta propiedad, puede agregar el atributo #[Locked] a la propiedad:

 

use Livewire\Attributes\Locked;
use Livewire\Component;
 
class ShowPost extends Component
{
    #[Locked] 
    public $id;
 
    public function mount($postId)
    {
        $this->id = $postId;
    }
 
}

 

Al agregar el atributo #[Locked], se asegura de que la propiedad $id nunca será modificada.

 

#Las propiedades del modelo son seguras de forma predeterminada

 

Si almacena un modelo Eloquent en una propiedad pública en lugar de solo el ID del modelo, Livewire se asegurará de que el ID no se altere, sin que sea necesario agregar explícitamente el atributo #[Locked] a la propiedad. 

En la mayoría de los casos, este es un mejor enfoque que usar #[Locked]:

 

class ShowPost extends Component
{
   public Post $post; 
 
   public function mount($postId)
   {
       $this->post = Post::find($postId);
   }
 
  // ...
}

 

#¿Por qué no utilizar propiedades protected?

 

Quizás se pregunte: ¿por qué no utilizar propiedades protected para los datos confidenciales?

 

Recuerde que Livewire solo conserva las propiedades públicas entre solicitudes de red. Para los datos estáticos y codificados, las propiedades protected son adecuadas. Sin embargo, para los datos que se almacenan en tiempo de ejecución, debe utilizar una propiedad pública para garantizar que los datos se conserven correctamente.

 

#¿No podría Livewire hacer esto automáticamente?

 

En un mundo perfecto, Livewire bloquearía las propiedades de forma predeterminada y solo permitiría modificaciones cuando se use wire:model en esa propiedad.

 

Lamentablemente, eso requeriría que Livewire analizara todas las plantillas de Blade para comprender si una propiedad es modificada por wire:model o una API similar.

 

Eso no solo agregaría una sobrecarga técnica y de rendimiento, sino que sería imposible detectar si una propiedad es mutada por algo como Alpine o cualquier otro JavaScript personalizado.

 

Por lo tanto, Livewire seguirá haciendo que las propiedades públicas sean mutables libremente de forma predeterminada y brindará a los desarrolladores las herramientas para bloquearlas según sea necesario.

 

 

Antonio Jenaro

Antonio Jenaro

Web Developer

Fuente: Livewire documentation

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión