PHPackages                             anteris-dev/form-request - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. anteris-dev/form-request

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

anteris-dev/form-request
========================

A lightweight form request DTO for Laravel.

491[3 issues](https://github.com/Anteris-Dev/form-request/issues)PHP

Since Aug 17Pushed 2y ago1 watchersCompare

[ Source](https://github.com/Anteris-Dev/form-request)[ Packagist](https://packagist.org/packages/anteris-dev/form-request)[ RSS](/packages/anteris-dev-form-request/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependenciesVersions (1)Used By (0)

\[WIP\] Form Request
====================

[](#wip-form-request)

[![Tests](https://github.com/Anteris-Dev/form-request/actions/workflows/tests.yaml/badge.svg)](https://github.com/Anteris-Dev/form-request/actions/workflows/tests.yaml)[![Style](https://github.com/Anteris-Dev/form-request/actions/workflows/style.yaml/badge.svg)](https://github.com/Anteris-Dev/form-request/actions/workflows/style.yaml)

Inspired by a [Twitter](https://twitter.com/brendt_gd/status/1409808574860214276?s=21) thread, this is a stab at making Form Request data transfer objects. This package is currently WIP.

Creating a Form Request
-----------------------

[](#creating-a-form-request)

To create your request with validation rules, simply extend `AnterisDev\FormRequest\FormRequestData` and add your public properties. To specify the validation rules for a property, pass a string of Laravel validation rules to the `AnterisDev\FormRequest\Attributes\Validation` attribute.

> **Note**: This package intelligently adds rules like "required" when a property is not nullable and handles adding rules for default PHP types such as "string" for properties that are type hinted as a `string`.

For example:

```
use AnterisDev\FormRequest\Attributes\Validation;
use AnterisDev\FormRequest\FormRequestData;

class CreatePersonRequest extends FormRequestData
{
    #[Validation('required', 'string', 'max:255')]
    public string $first_name;

    #[Validation('required|string|max:255')]
    public string $last_name;

    // This property is still required because it is not nullable.
    // This property will also be validated as a string since it has that type.
    #[Validation('max:255')]
    public string $email;
}
```

Then specify this request in your controller method:

```
public function store(CreatePersonRequest $request)
{
    die('Hello ' . $request->first_name . ' ' . $request->last_name);
}
```

\[WIP\] Validation Attributes
-----------------------------

[](#wip-validation-attributes)

To assist with building your validation rules, various attributes are available. These attributes have typed parameters so that it is easy to see their available options.

The following attributes currently exist:

- `Anteris\FormRequest\Attributes\Accepted`
- `Anteris\FormRequest\Attributes\AcceptedIf`
- `Anteris\FormRequest\Attributes\ActiveUrl`
- `Anteris\FormRequest\Attributes\After`
- `Anteris\FormRequest\Attributes\AfterOrEqual`
- `Anteris\FormRequest\Attributes\Alpha`
- `Anteris\FormRequest\Attributes\AlphaNumeric`
- `Anteris\FormRequest\Attributes\AlphaNumericDash`
- `Anteris\FormRequest\Attributes\Bail`
- `Anteris\FormRequest\Attributes\Before`
- `Anteris\FormRequest\Attributes\BeforeOrEqual`
- `Anteris\FormRequest\Attributes\Between`
- `Anteris\FormRequest\Attributes\Boolean`
- `Anteris\FormRequest\Attributes\Confirmed`
- `Anteris\FormRequest\Attributes\CurrentPassword`
- `Anteris\FormRequest\Attributes\Date`
- `Anteris\FormRequest\Attributes\DateEquals`
- `Anteris\FormRequest\Attributes\DateFormat`
- `Anteris\FormRequest\Attributes\Different`
- `Anteris\FormRequest\Attributes\Digits`
- `Anteris\FormRequest\Attributes\DigitsBetween`
- `Anteris\FormRequest\Attributes\Dimensions`
- `Anteris\FormRequest\Attributes\Email`
- `Anteris\FormRequest\Attributes\EndsWith`
- `Anteris\FormRequest\Attributes\ExcludeIf`
- `Anteris\FormRequest\Attributes\ExcludeUnless`
- `Anteris\FormRequest\Attributes\Exists`
- `Anteris\FormRequest\Attributes\File`
- `Anteris\FormRequest\Attributes\Filled`
- `Anteris\FormRequest\Attributes\GreaterThan`
- `Anteris\FormRequest\Attributes\GreaterThanOrEqualTo`
- `Anteris\FormRequest\Attributes\Image`
- `Anteris\FormRequest\Attributes\In`
- `Anteris\FormRequest\Attributes\Integer`
- `Anteris\FormRequest\Attributes\IP`
- `Anteris\FormRequest\Attributes\IPv4`
- `Anteris\FormRequest\Attributes\IPv6`
- `Anteris\FormRequest\Attributes\Json`
- `Anteris\FormRequest\Attributes\LessThan`
- `Anteris\FormRequest\Attributes\LessThanOrEqualTo`
- `Anteris\FormRequest\Attributes\Max`
- `Anteris\FormRequest\Attributes\Mimes`
- `Anteris\FormRequest\Attributes\MimeTypes`
- `Anteris\FormRequest\Attributes\Min`
- `Anteris\FormRequest\Attributes\MultipleOf`
- `Anteris\FormRequest\Attributes\NotIn`
- `Anteris\FormRequest\Attributes\NotRegex`
- `Anteris\FormRequest\Attributes\Nullable`
- `Anteris\FormRequest\Attributes\Numeric`
- `Anteris\FormRequest\Attributes\Password`
- `Anteris\FormRequest\Attributes\PasswordDefaults`
- `Anteris\FormRequest\Attributes\Present`
- `Anteris\FormRequest\Attributes\Prohibited`
- `Anteris\FormRequest\Attributes\ProhibitedIf`
- `Anteris\FormRequest\Attributes\ProhibitedUnless`
- `Anteris\FormRequest\Attributes\Regex`
- `Anteris\FormRequest\Attributes\Required`
- `Anteris\FormRequest\Attributes\RequiredIf`
- `Anteris\FormRequest\Attributes\RequiredUnless`
- `Anteris\FormRequest\Attributes\RequiredWith`
- `Anteris\FormRequest\Attributes\RequiredWithAll`
- `Anteris\FormRequest\Attributes\RequiredWithout`
- `Anteris\FormRequest\Attributes\RequiredWithoutAll`
- `Anteris\FormRequest\Attributes\Same`
- `Anteris\FormRequest\Attributes\Size`
- `Anteris\FormRequest\Attributes\StartsWith`
- `Anteris\FormRequest\Attributes\Timezone`
- `Anteris\FormRequest\Attributes\Url`
- `Anteris\FormRequest\Attributes\Uuid`

To create your own validation attribute, simply extend `Anteris\FormRequest\Attributes\Rule` and provide the correct output to the `getRules()` method.

### Email Validation

[](#email-validation)

Due to several options available to the Email validator, the Email validation attribute accepts several flags. These are:

- `Email::RfcValidation`
- `Email::NoRfcWarningsValidation`
- `Email::DnsCheckValidation`
- `Email::SpoofCheckValidation`
- `Email:FilterEmailValidation`

By default, the mode is set to `Email::RfcValidation`.

See an example of this usage below:

```
class ContactInformation extends FormRequestData
{
    #[Email]
    public string $email;

    #[Email(Email::DnsCheckValidation | Email::SpoofCheckValidation)]
    public string $email_2;
}
```

###  Health Score

14

—

LowBetter than 2% of packages

Maintenance5

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity28

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/3dca3c3ac71024f7878526a0fe0a384fbf198ed711fe7e7bb34177a1dbc849f6?d=identicon)[golthem](/maintainers/golthem)

---

Top Contributors

[![aidan-casey](https://avatars.githubusercontent.com/u/6686277?v=4)](https://github.com/aidan-casey "aidan-casey (37 commits)")

### Embed Badge

![Health badge](/badges/anteris-dev-form-request/health.svg)

```
[![Health](https://phpackages.com/badges/anteris-dev-form-request/health.svg)](https://phpackages.com/packages/anteris-dev-form-request)
```

###  Alternatives

[webmozart/assert

Assertions to validate method input/output with nice error messages.

7.6k894.0M1.2k](/packages/webmozart-assert)[bensampo/laravel-enum

Simple, extensible and powerful enumeration implementation for Laravel.

2.0k15.9M104](/packages/bensampo-laravel-enum)[swaggest/json-schema

High definition PHP structures with JSON-schema based validation

48612.5M73](/packages/swaggest-json-schema)[stevebauman/purify

An HTML Purifier / Sanitizer for Laravel

5325.6M19](/packages/stevebauman-purify)[ashallendesign/laravel-config-validator

A package for validating your Laravel app's config.

217905.3k5](/packages/ashallendesign-laravel-config-validator)[crazybooot/base64-validation

Laravel validators for base64 encoded files

1341.9M8](/packages/crazybooot-base64-validation)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
