# Laravel Validation

> Form request validation and comprehensive validation testing. Use when creating or modifying form requests, validation rules, or validation tests.

- Skill: `leeovery/laravel-validation` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add leeovery/laravel-validation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/leeovery/laravel-validation/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: leeovery (https://skillmd.com/u/leeovery)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/leeovery/laravel-validation

---


# Laravel Validation

Form requests as single source of truth for validation, with comprehensive testing patterns.

## Core Concepts

**[form-requests.md](references/form-requests.md)** - Validation rules:
- Array-based validation rules
- Custom validation rules
- Conditional validation
- Custom error messages
- DTO transformation via `toDto()`

**[validation-testing.md](references/validation-testing.md)** - Validation testing:
- RequestDataProviderItem helper
- Pest datasets for systematic testing
- Built-in helper methods (string, email, number, date, array, boolean)
- Presence testing with `absent()` (for `present` / `sometimes` / `missing` rules)
- Nested array testing
- Conditional validation testing
- Real-world examples

## Pattern

```php
final class CreateOrderRequest extends FormRequest
{
    public function rules(): array
    {
        return [
            'user_id' => ['required', 'integer', 'exists:users,id'],
            'items' => ['required', 'array', 'min:1'],
            'items.*.product_id' => ['required', 'integer'],
            'items.*.quantity' => ['required', 'integer', 'min:1'],
        ];
    }

    public function toDto(): CreateOrderDto
    {
        return CreateOrderDto::from($this->validated());
    }
}
```

All validation lives in form requests. Test validation systematically.

