Атрибут Session
Атрибут #[Session] используется для пометки публичного свойства компонента Livewire, значение которого должно автоматически сохраняться в сессии и восстанавливаться при следующем запросе. Это позволяет сохранять состояние компонента даже после перезагрузки страницы или перехода на другие страницы сайта. Атрибут не принимает параметров.
Синтаксис
Атрибут указывается над публичным свойством компонента:
<?php
namespace AppLivewire;
use LivewireComponent;
use LivewireAttributesSession;
class UserSettings extends Component
{
#[Session]
public $theme = 'light';
public function render()
{
return view('livewire.user-settings');
}
}
?>
Пример
Давайте создадим компонент счётчика, значение которого сохраняется в сессии:
<?php
namespace AppLivewire;
use LivewireComponent;
use LivewireAttributesSession;
class Counter extends Component
{
#[Session]
public $count = 0;
public function increment()
{
$this->count++;
}
public function resetCount()
{
$this->count = 0;
}
public function render()
{
return view('livewire.counter');
}
}
?>
<div>
<p>Count: {{ $count }}</p>
<button wire:click="increment">Increment</button>
<button wire:click="resetCount">Reset</button>
</div>
После обновления страницы значение $count сохранится благодаря атрибуту #[Session].
Пример
Атрибут #[Session] можно использовать для хранения выбранных пользователем настроек, например, языка интерфейса:
<?php
namespace AppLivewire;
use LivewireComponent;
use LivewireAttributesSession;
class Settings extends Component
{
#[Session]
public $language = 'ru';
public $availableLanguages = ['ru', 'en', 'fr', 'de'];
public function setLanguage($lang)
{
if (in_array($lang, $this->availableLanguages)) {
$this->language = $lang;
session()->put('app_locale', $lang);
app()->setLocale($lang);
}
}
public function render()
{
return view('livewire.settings');
}
}
?>
<div>
<p>Current language: {{ $language }}</p>
@foreach ($availableLanguages as $lang)
<button wire:click="setLanguage('{{ $lang }}')">
{{ strtoupper($lang) }}
</button>
@endforeach
</div>
Выбранный язык будет сохранен в сессии и восстановлен при следующем посещении страницы.