validationAttributes() в Livewire
Метод validationAttributes используется в компонентах Livewire
для определения пользовательских имен атрибутов при валидации.
Он должен возвращать массив, где ключ - имя поля,
а значение - желаемое отображаемое имя.
Это особенно полезно, когда вы хотите заменить технические имена полей
на более понятные для пользователя формулировки в сообщениях об ошибках.
Метод работает в паре с правилами валидации и сообщениями,
определенными в классе компонента.
Синтаксис
<?php
namespace AppLivewire;
use LivewireComponent;
class UserForm extends Component
{
public $name;
public $email;
public function validationAttributes()
{
return [
'name' => 'User Name',
'email' => 'Email Address',
];
}
public function render()
{
return view('livewire.user-form');
}
}
?>
Метод validationAttributes должен возвращать ассоциативный массив,
где ключи - это имена полей компонента, а значения - пользовательские названия.
Пример
Давайте создадим форму с полями для имени и email.
При отправке формы мы будем валидировать данные,
а в сообщениях об ошибках используем пользовательские имена
с помощью метода validationAttributes:
<?php
namespace AppLivewire;
use LivewireComponent;
class UserForm extends Component
{
public $name = '';
public $email = '';
protected function rules()
{
return [
'name' => 'required|min:3|max:255',
'email' => 'required|email|max:255',
];
}
public function validationAttributes()
{
return [
'name' => 'Full Name',
'email' => 'Email Address',
];
}
public function save()
{
$this->validate();
// Save user logic here...
}
public function render()
{
return view('livewire.user-form');
}
}
?>
<div>
<form wire:submit="save">
<div>
<label>Name:</label>
<input type="text" wire:model="name">
@error('name') <span>{{ $message }}</span> @enderror
</div>
<div>
<label>Email:</label>
<input type="email" wire:model="email">
@error('email') <span>{{ $message }}</span> @enderror
</div>
<button type="submit">Save</button>
</form>
</div>
Если пользователь отправит форму с пустым полем name, то сообщение об ошибке будет содержать пользовательское имя "Full Name":
<div>
<form>
<div>
<label>Name:</label>
<input type="text">
<span>The Full Name field is required.</span>
</div>
<div>
<label>Email:</label>
<input type="email">
</div>
<button>Save</button>
</form>
</div>
А если email будет в неверном формате, то сообщение будет использовать пользовательское имя "Email Address":
<div>
<form>
<div>
<label>Name:</label>
<input type="text">
</div>
<div>
<label>Email:</label>
<input type="email">
<span>The Email Address must be a valid email address.</span>
</div>
<button>Save</button>
</form>
</div>
Результат выполнения кода с неверными данными:
"Full Name is required. Email Address must be a valid email address."
Пример
Метод validationAttributes также работает с вложенными полями.
Например, для полей формы, которые используют точечную нотацию:
<?php
namespace AppLivewire;
use LivewireComponent;
class ProfileForm extends Component
{
public $user = [
'first_name' => '',
'last_name' => '',
'contact' => [
'phone' => '',
'address' => '',
],
];
protected function rules()
{
return [
'user.first_name' => 'required|max:50',
'user.last_name' => 'required|max:50',
'user.contact.phone' => 'required|numeric',
'user.contact.address' => 'required|min:10',
];
}
public function validationAttributes()
{
return [
'user.first_name' => 'First Name',
'user.last_name' => 'Last Name',
'user.contact.phone' => 'Phone Number',
'user.contact.address' => 'Address',
];
}
public function save()
{
$this->validate();
// Save profile logic...
}
public function render()
{
return view('livewire.profile-form');
}
}
?>
<div>
<form wire:submit="save">
<div>
<label>First Name:</label>
<input type="text" wire:model="user.first_name">
@error('user.first_name') <span>{{ $message }}</span> @enderror
</div>
<div>
<label>Last Name:</label>
<input type="text" wire:model="user.last_name">
@error('user.last_name') <span>{{ $message }}</span> @enderror
</div>
<div>
<label>Phone:</label>
<input type="text" wire:model="user.contact.phone">
@error('user.contact.phone') <span>{{ $message }}</span> @enderror
</div>
<div>
<label>Address:</label>
<textarea wire:model="user.contact.address"></textarea>
@error('user.contact.address') <span>{{ $message }}</span> @enderror
</div>
<button type="submit">Save Profile</button>
</form>
</div>
Результат выполнения кода при пустом поле address:
"The Address field is required."