#[Validate]
Add validation rules to your component properties.
Basic Usage
Apply Laravel validation rules using the #[Validate] attribute.
use LiVue\Attributes\Validate;
class ContactForm extends Component
{
#[Validate('required|min:3')]
public string $name = '';
#[Validate('required|email')]
public string $email = '';
#[Validate('required|min:10')]
public string $message = '';
public function submit()
{
$this->validate();
// All validations passed
Contact::create([...]);
}
}
Displaying Errors
Access validation errors in your template via livue.errors.
<div>
<input v-model="name" />
<span
v-if="livue.errors.name"
class="text-red-500"
>
{{ livue.errors.name[0] }}
</span>
</div>
<!-- Or use Blade's @error directive for server-rendered errors -->
@error('name')
<span class="text-red-500">{{ $message }}</span>
@enderror
Using rules() Method
For complex or dynamic rules, use the rules() method.
protected function rules(): array
{
return [
'email' => [
'required',
'email',
Rule::unique('users')->ignore($this->userId),
],
'password' => $this->userId ? 'nullable|min:8' : 'required|min:8',
];
}
Real-time Validation
Validate individual fields as the user types using validateOnly().
public function updatedEmail($value)
{
$this->validateOnly('email');
}
Custom Error Messages
#[Validate('required|email', message: 'Please enter a valid email address')]
public string $email = '';
// Or via messages() method
protected function messages(): array
{
return [
'email.required' => 'We need your email address',
'email.email' => 'That doesn\'t look like an email',
];
}