Saltearse al contenido

Propiedades de Sesión

Livewire facilita la persistencia de los valores de las propiedades a través de las actualizaciones/cambios de página utilizando el atributo #[Session].

Añadiendo #[Session] a una propiedad de su componente, Livewire almacenará el valor de esa propiedad en la sesión cada vez que cambie. De esta forma, cuando se actualice una página, Livewire obtendrá el último valor de la sesión y lo utilizará en su componente.

El atributo #[Session] es análogo al atributo #[Url]. Ambos son útiles en escenarios similares. La principal diferencia es que #[Session] persiste los valores sin modificar la cadena de consulta de la URL, lo que a veces es deseable y a veces no.

Uso básico

Este es un componente ShowPosts que permite a los usuarios filtrar los mensajes visibles por una cadena almacenada en una propiedad $search

<?php
use Livewire\Attributes\Session;
use Livewire\Component;
use App\Models\Post;
class ShowPosts extends Component
{
#[Session]
public $search;
protected function posts()
{
return $this->search === ''
? Post::all()
: Post::where('title', 'like', '%'.$this->search.'%');
}
public function render()
{
return view('livewire.show-posts', [
'posts' => $this->posts(),
]);
}
}

Dado que se ha añadido el atributo #[Session] a la propiedad $search, después de que un usuario introduzca un valor de búsqueda, puede actualizar la página y el valor de búsqueda se mantendrá. Cada vez que se actualice $search, su nuevo valor se almacenará en la sesión del usuario y se utilizará en todas las cargas de la página.

Establecer una clave personalizada

Cuando se utiliza [#Session], Livewire almacenará el valor de la propiedad en la sesión utilizando una clave generada dinámicamente que consiste en el nombre del componente combinado con el nombre de la propiedad.

Esto asegura que las propiedades entre instancias de componentes utilizarán el mismo valor de sesión. También garantiza que las propiedades con el mismo nombre de distintos componentes no entren en conflicto.

Si desea un control total sobre la clave de sesión que Livewire utiliza para una propiedad determinada, puede pasar el parámetro key::

<?php
use Livewire\Attributes\Session;
use Livewire\Component;
class ShowPosts extends Component
{
#[Session(key: 'search')]
public $search;
// ...
}

Cuando Livewire almacena y recupera el valor de la propiedad $search, utilizará la clave dada: “search”.

Además, si desea generar la clave dinámicamente a partir de otras propiedades de su componente, puede hacerlo utilizando la siguiente notación de llaves:

<?php
use Livewire\Attributes\Session;
use Livewire\Component;
use App\Models\Author;
class ShowPosts extends Component
{
public Author $author;
#[Session(key: 'search-{author.id}')]
public $search;
// ...
}

En el ejemplo anterior, si el id del modelo $author es “4”, la clave de sesión será: search-4