PHPackages                             erag/laravel-case-mapper-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. erag/laravel-case-mapper-request

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

erag/laravel-case-mapper-request
================================

Seamlessly integrate attribute-based case mapping into Laravel FormRequests — transform keys and remap validation errors effortlessly.

v1.1.0(9mo ago)4468MITPHPPHP ^8.1CI passing

Since Jul 19Pushed 9mo agoCompare

[ Source](https://github.com/eramitgupta/laravel-case-mapper-request)[ Packagist](https://packagist.org/packages/erag/laravel-case-mapper-request)[ GitHub Sponsors](https://github.com/eramitgupta)[ RSS](/packages/erag-laravel-case-mapper-request/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (2)Versions (3)Used By (0)

Laravel Case Mapper Request
===========================

[](#laravel-case-mapper-request)

A Laravel package that transforms request input keys using PHP 8+ attributes. Supports formats like camelCase, snake\_case, StudlyCase, UPPERCASE, enabling flexible data handling from varied sources. Ideal for backend services needing consistent input structures, regardless of client naming conventions.

> 📦 Designed for Laravel 10, 11, and 12 — No core modification required.

---

✨ Features
----------

[](#-features)

- 🧠 Automatically map incoming request keys to match your validation expectations
- 🧩 Attribute-based syntax using `#[MapName(...)]`
- 🔄 Supports multiple naming conventions
- 🧩 Integrates seamlessly with Laravel `FormRequest`
- 📚 Extendable with custom mappers
- ✅ Zero configuration, zero core **hacks**
- 🎨 Works with any frontend (React, Vue, etc.)

> 💡 Recommended: Vue or React for best developer experience

---

🔧 Supported Case Mappers
------------------------

[](#-supported-case-mappers)

Mapper ClassFrontend InputValidated As output`SnakeCaseMapper``firstName``first_name``CamelCaseMapper``first_name``firstName``StudlyCaseMapper``FirstName``first_name``UpperCaseMapper``FIRSTNAME``firstname`---

📦 Installation
--------------

[](#-installation)

```
composer require erag/laravel-case-mapper-request
```

> No config file or publishing required.

---

Create a Form Request with Case Mapping
---------------------------------------

[](#create-a-form-request-with-case-mapping)

### 🧩 1. Create a Form Request class

[](#-1-create-a-form-request-class)

```
php artisan make:request ContactRequest
```

---

### 🧩 2. Add the attribute and trait

[](#-2-add-the-attribute-and-trait)

```
use LaravelCaseMapperRequest\Attributes\MapName;
use LaravelCaseMapperRequest\Traits\HasKeyTransformers;
use LaravelCaseMapperRequest\Mappers\SnakeCaseMapper;

#[MapName(SnakeCaseMapper::class)] // or CamelCaseMapper, UpperCaseMapper, StudlyCaseMapper etc.
class ContactRequest extends FormRequest
{
    use HasKeyTransformers;

    public function authorize(): bool
    {
        return true;
    }

    public function rules(): array
    {
        return [
            'first_name' => 'required|string',
            'last_name' => 'required|string',
            'email_address' => 'required|email',
        ];
    }

}
```

---

### 🧩 3. Use it in a Controller

[](#-3-use-it-in-a-controller)

```
use App\Http\Requests\ContactRequest;

class ContactController extends Controller
{
    public function store(ContactRequest $request)
    {
        $validated = $request->validated();

        // Example:
        // Contact::create($validated);

        return response()->json([
            'message' => 'Submitted successfully!',
            'data' => $validated
        ]);
    }
}
```

---

### Step 3: Frontend Input Example (Vue + Inertia)

[](#step-3-frontend-input-example-vue--inertia)

```

    Submit

import { useForm } from '@inertiajs/vue3'

const form = useForm({
  firstName: '',
  lastName: '',
  emailAddress: ''
})

function submit() {
  form.post('/form/snake')
}

```

### Step 4: Backend Automatically Maps It

[](#step-4-backend-automatically-maps-it)

**Incoming :**

```
{
  "firstName": "Amit",
  "lastName": "Gupta",
  "emailAddress": "amit@example.com"
}
```

**Mapped for Validation output:**

```
[
  'first_name' => 'Amit',
  'last_name' => 'Gupta',
  'email_address' => 'amit@example.com'
]
```

---

🧠 Defining Your Own Case Mapper
-------------------------------

[](#-defining-your-own-case-mapper)

Need to support a custom casing style or transformation logic?
You can easily create your own mapper by implementing the `CaseMapperContract`

Just implement the contract:

```
use LaravelCaseMapperRequest\Contracts\CaseMapperContract;

class KebabCaseMapper implements CaseMapperContract
{
    public static function map(array $data): array
    {
        return collect($data)
            ->mapWithKeys(fn($value, $key) => [Str::kebab($key) => $value])
            ->toArray();
    }
}
```

Then apply to any FormRequest:

```
#[MapName(KebabCaseMapper::class)]
```

---

📄 License
---------

[](#-license)

MIT © [Amit Gupta](https://github.com/eramitgupta)

---

🔗 Connect
---------

[](#-connect)

Made with ❤️ by **[Amit Gupta](https://github.com/eramitgupta)**

- 🐦 [Twitter](https://twitter.com/_eramitgupta)
- 💼 [LinkedIn](https://linkedin.com/in/eramitgupta)

---

> ⭐ Found this useful? Star it on GitHub!

###  Health Score

35

—

LowBetter than 79% of packages

Maintenance59

Moderate activity, may be stable

Popularity20

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 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.

###  Release Activity

Cadence

Every ~1 days

Total

2

Last Release

292d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/a8bf46883c00ee2ed8799a2b9a538a9ddf41c8a2eeda0ce69c04a0562de101f5?d=identicon)[eramitgupta](/maintainers/eramitgupta)

---

Top Contributors

[![eramitgupta](https://avatars.githubusercontent.com/u/72160684?v=4)](https://github.com/eramitgupta "eramitgupta (9 commits)")

---

Tags

caselaravellaravel-frameworkmappermappingphp8requestvalidationlaravelvalidationuppercaseattributekebab casesnake casecamelcaseform-requestformrequestcase mappinginput mapperrequest transformererror remapauto mapapi request cleanuppascalCase

### Embed Badge

![Health badge](/badges/erag-laravel-case-mapper-request/health.svg)

```
[![Health](https://phpackages.com/badges/erag-laravel-case-mapper-request/health.svg)](https://phpackages.com/packages/erag-laravel-case-mapper-request)
```

###  Alternatives

[propaganistas/laravel-phone

Adds phone number functionality to Laravel based on Google's libphonenumber API.

3.0k35.7M106](/packages/propaganistas-laravel-phone)[proengsoft/laravel-jsvalidation

Validate forms transparently with Javascript reusing your Laravel Validation Rules, Messages, and FormRequest

1.1k2.3M49](/packages/proengsoft-laravel-jsvalidation)[axlon/laravel-postal-code-validation

Worldwide postal code validation for Laravel and Lumen

3853.3M1](/packages/axlon-laravel-postal-code-validation)[wendelladriel/laravel-validated-dto

Data Transfer Objects with validation for Laravel applications

759569.4k13](/packages/wendelladriel-laravel-validated-dto)[laravel-validation-rules/credit-card

Validate credit card number, expiration date, cvc

2412.2M5](/packages/laravel-validation-rules-credit-card)[illuminatech/validation-composite

Allows uniting several validation rules into a single one for easy re-usage

184485.5k](/packages/illuminatech-validation-composite)

PHPackages © 2026

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