3.4. Валидация
3.4. Валидация
Livewire стремится сделать процесс валидации пользовательского ввода и предоставления обратной связи максимально удобным. Используя встроенные возможности валидации Laravel, Livewire опирается на уже имеющиеся у вас знания и при этом предоставляет надёжные дополнительные функции, такие как валидация в реальном времени.
Вот пример компонента CreatePost, демонстрирующего самый базовый процесс валидации в Livewire:
<?php namespace App\Livewire; use Livewire\Component;use App\Models\Post; class CreatePost extends Component{ public $title = ''; public $content = ''; public function save() { $validated = $this->validate([ 'title' => 'required|min:3', 'content' => 'required|min:3', ]); Post::create($validated); return redirect()->to('/posts'); } public function render() { return view('livewire.create-post'); }}
<form wire:submit="save"> <input type="text" wire:model="title"> <div>@error('title') {{ $message }} @enderror</div> <textarea wire:model="content"></textarea> <div>@error('content') {{ $message }} @enderror</div> <button type="submit">Save</button></form>
Как видите, Livewire предоставляет метод validate(), который можно вызвать для валидации свойств компонента. Он возвращает проверенный набор данных, который затем можно безопасно сохранить в базе данных.
На фронтенде вы можете использовать существующие Blade-директивы Laravel для отображения сообщений валидации пользователям.
Для получения дополнительной информации см. документацию Laravel по отображению ошибок валидации в Blade.
1. Валидация атрибутов
Если вы предпочитаете располагать правила валидации компонента непосредственно рядом со свойствами, вы можете использовать атрибут Livewire #[Validate].
При привязке правил валидации к свойствам с помощью #[Validate], Livewire будет автоматически выполнять валидацию этих свойств перед каждым их обновлением. Тем не менее, вы всё равно должны вызывать $this->validate() перед сохранением данных в базу, чтобы проверить свойства, которые не были изменены.
use Livewire\Attributes\Validate;use Livewire\Component;use App\Models\Post; class CreatePost extends Component{ #[Validate('required|min:3')] public $title = ''; #[Validate('required|min:3')] public $content = ''; public function save() { $this->validate(); Post::create([ 'title' => $this->title, 'content' => $this->content, ]); return redirect()->to('/posts'); } // ...}