BETA We're building something new — all help is welcome! Contribute →

#[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',
    ];
}