PHPackages                             umutcangungormus/laravel-named-route-binding - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. umutcangungormus/laravel-named-route-binding

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

umutcangungormus/laravel-named-route-binding
============================================

Bind route parameters to controller method arguments by name instead of order

v1.0.2(5mo ago)12MITPHPPHP ^8.1

Since Dec 12Pushed 5mo agoCompare

[ Source](https://github.com/UmutCanGungormus/laravel-name-route-binding)[ Packagist](https://packagist.org/packages/umutcangungormus/laravel-named-route-binding)[ RSS](/packages/umutcangungormus-laravel-named-route-binding/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (3)Versions (3)Used By (0)

Laravel Named Route Binding
===========================

[](#laravel-named-route-binding)

[![Latest Version on Packagist](https://camo.githubusercontent.com/804ce1c81c9ed9dfd3f0043d71d9b8bea58b48df475a4249855bebc8d4f31be9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f756d757463616e67756e676f726d75732f6c61726176656c2d6e616d65642d726f7574652d62696e64696e672e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/umutcangungormus/laravel-named-route-binding)[![Total Downloads](https://camo.githubusercontent.com/4c5fed30e551b0fda4e887f90410d3be23517a2c7e48d1e00546b51fd76c0cd9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f756d757463616e67756e676f726d75732f6c61726176656c2d6e616d65642d726f7574652d62696e64696e672e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/umutcangungormus/laravel-named-route-binding)

Laravel'de route parametrelerini controller metodlarına **isimlerine göre** bağlayan bir paket. Artık parametre sırası önemli değil!

Problem
-------

[](#problem)

Laravel'de varsayılan olarak route parametreleri controller metodlarına **sırasına göre** geçirilir:

```
// routes/web.php
Route::get('/users/{user}/posts/{post}', [PostController::class, 'show']);

// PostController.php - Parametreler SIRAYLA gelmeli!
public function show($user, $post)
{
    // $user = {user} route parametresi
    // $post = {post} route parametresi
}

// ❌ Bu ÇALIŞMAZ! Sıra yanlış olduğu için $post'a user değeri gelir
public function show($post, $user)
{
    // $post = {user} route parametresi (YANLIŞ!)
    // $user = {post} route parametresi (YANLIŞ!)
}
```

Çözüm
-----

[](#çözüm)

Bu paket ile parametreler **isimlerine göre** eşleştirilir:

```
// routes/web.php
Route::get('/users/{user}/posts/{post}', [PostController::class, 'show']);

// PostController.php - Artık sıra önemli DEĞİL!
public function show($post, $user)
{
    // ✅ $post = {post} route parametresi (İSİMLE EŞLEŞTİ!)
    // ✅ $user = {user} route parametresi (İSİMLE EŞLEŞTİ!)
}

// İstediğiniz sırada yazabilirsiniz
public function show($user, $post) // ✅ Çalışır
public function show($post, $user) // ✅ Çalışır
```

Kurulum
-------

[](#kurulum)

Composer ile paketi yükleyin:

```
composer require umutcangungormus/laravel-named-route-binding
```

Paket otomatik olarak keşfedilir (Laravel 5.5+). Manuel kayıt gerekiyorsa:

```
// config/app.php
'providers' => [
    // ...
    UmutcanGungormus\NamedRouteBinding\NamedRouteBindingServiceProvider::class,
],
```

Yapılandırma (Opsiyonel)
------------------------

[](#yapılandırma-opsiyonel)

Yapılandırma dosyasını yayınlayın:

```
php artisan vendor:publish --provider="UmutcanGungormus\NamedRouteBinding\NamedRouteBindingServiceProvider"
```

`config/named-route-binding.php`:

```
return [
    // Özelliği etkinleştir/devre dışı bırak
    'enabled' => env('NAMED_ROUTE_BINDING_ENABLED', true),
];
```

Özellikler
----------

[](#özellikler)

### 1. İsimle Eşleştirme

[](#1-i̇simle-eşleştirme)

```
Route::get('/categories/{category}/products/{product}', [ProductController::class, 'show']);

// Her iki yazım da çalışır
public function show($category, $product) { }
public function show($product, $category) { }
```

### 2. Snake\_case / CamelCase Desteği

[](#2-snake_case--camelcase-desteği)

Route parametresi `user_id` ise, metod parametresi `userId` veya `user_id` olabilir:

```
Route::get('/users/{user_id}', [UserController::class, 'show']);

// Her ikisi de çalışır
public function show($user_id) { }
public function show($userId) { }
```

### 3. Dependency Injection Desteği

[](#3-dependency-injection-desteği)

Request ve diğer bağımlılıklar otomatik enjekte edilir:

```
Route::get('/users/{user}', [UserController::class, 'show']);

public function show(Request $request, $user)
{
    // $request otomatik enjekte edilir
    // $user route parametresinden gelir
}

// Sıra değiştirilebilir
public function show($user, Request $request) { }
```

### 4. Varsayılan Değerler

[](#4-varsayılan-değerler)

```
Route::get('/posts/{post}', [PostController::class, 'show']);

public function show($post, $format = 'json')
{
    // $format varsayılan değeri kullanır
}
```

### 5. Nullable Parametreler

[](#5-nullable-parametreler)

```
public function show($post, ?string $optional)
{
    // $optional null olur eğer route'da yoksa
}
```

Route Model Binding ile Kullanım
--------------------------------

[](#route-model-binding-ile-kullanım)

Laravel'in Route Model Binding özelliği ile tam uyumludur:

```
Route::get('/users/{user}/posts/{post}', [PostController::class, 'show']);

// Type-hinted modeller otomatik çözümlenir
public function show(Post $post, User $user)
{
    // $post ve $user model instance'ları olarak gelir
}
```

Gerçek Dünya Örnekleri
----------------------

[](#gerçek-dünya-örnekleri)

### Örnek 1: E-ticaret

[](#örnek-1-e-ticaret)

```
// routes/web.php
Route::get('/shops/{shop}/categories/{category}/products/{product}', [ProductController::class, 'show']);

// ProductController.php - İstediğiniz sırada
public function show(
    Request $request,
    Product $product,    // 3. route parametresi
    Category $category,  // 2. route parametresi
    Shop $shop          // 1. route parametresi
) {
    // Hepsi doğru şekilde eşleşir!
}
```

### Örnek 2: API Resource

[](#örnek-2-api-resource)

```
// routes/api.php
Route::get('/teams/{team}/members/{member}/tasks/{task}', [TaskController::class, 'show']);

// TaskController.php
public function show(Task $task, Member $member, Team $team)
{
    $this->authorize('view', [$task, $team]);

    return new TaskResource($task);
}
```

Test
----

[](#test)

```
composer test
```

Katkıda Bulunma
---------------

[](#katkıda-bulunma)

Pull request'ler memnuniyetle karşılanır!

Lisans
------

[](#lisans)

MIT Lisansı. Detaylar için [LICENSE](LICENSE) dosyasına bakın.

---

🇬🇧 English Version
==================

[](#-english-version)

A Laravel package that binds route parameters to controller method arguments **by name** instead of by order. Parameter order no longer matters!

The Problem
-----------

[](#the-problem)

By default in Laravel, route parameters are passed to controller methods **in order**:

```
// routes/web.php
Route::get('/users/{user}/posts/{post}', [PostController::class, 'show']);

// PostController.php - Parameters must be IN ORDER!
public function show($user, $post)
{
    // $user = {user} route parameter
    // $post = {post} route parameter
}

// ❌ This DOESN'T WORK! Wrong order means $post gets user value
public function show($post, $user)
{
    // $post = {user} route parameter (WRONG!)
    // $user = {post} route parameter (WRONG!)
}
```

The Solution
------------

[](#the-solution)

With this package, parameters are matched **by name**:

```
// routes/web.php
Route::get('/users/{user}/posts/{post}', [PostController::class, 'show']);

// PostController.php - Order NO LONGER matters!
public function show($post, $user)
{
    // ✅ $post = {post} route parameter (MATCHED BY NAME!)
    // ✅ $user = {user} route parameter (MATCHED BY NAME!)
}

// Write them in any order you want
public function show($user, $post) // ✅ Works
public function show($post, $user) // ✅ Works
```

Installation
------------

[](#installation)

Install the package via Composer:

```
composer require umutcangungormus/laravel-named-route-binding
```

The package will be auto-discovered (Laravel 5.5+). For manual registration:

```
// config/app.php
'providers' => [
    // ...
    UmutcanGungormus\NamedRouteBinding\NamedRouteBindingServiceProvider::class,
],
```

Configuration (Optional)
------------------------

[](#configuration-optional)

Publish the configuration file:

```
php artisan vendor:publish --provider="UmutcanGungormus\NamedRouteBinding\NamedRouteBindingServiceProvider"
```

`config/named-route-binding.php`:

```
return [
    // Enable/disable the feature
    'enabled' => env('NAMED_ROUTE_BINDING_ENABLED', true),
];
```

Features
--------

[](#features)

### 1. Name-Based Matching

[](#1-name-based-matching)

```
Route::get('/categories/{category}/products/{product}', [ProductController::class, 'show']);

// Both work
public function show($category, $product) { }
public function show($product, $category) { }
```

### 2. Snake\_case / CamelCase Support

[](#2-snake_case--camelcase-support)

If route parameter is `user_id`, method parameter can be `userId` or `user_id`:

```
Route::get('/users/{user_id}', [UserController::class, 'show']);

// Both work
public function show($user_id) { }
public function show($userId) { }
```

### 3. Dependency Injection Support

[](#3-dependency-injection-support)

Request and other dependencies are automatically injected:

```
Route::get('/users/{user}', [UserController::class, 'show']);

public function show(Request $request, $user)
{
    // $request is auto-injected
    // $user comes from route parameter
}

// Order can be changed
public function show($user, Request $request) { }
```

### 4. Default Values

[](#4-default-values)

```
Route::get('/posts/{post}', [PostController::class, 'show']);

public function show($post, $format = 'json')
{
    // $format uses default value
}
```

### 5. Nullable Parameters

[](#5-nullable-parameters)

```
public function show($post, ?string $optional)
{
    // $optional is null if not in route
}
```

Usage with Route Model Binding
------------------------------

[](#usage-with-route-model-binding)

Fully compatible with Laravel's Route Model Binding:

```
Route::get('/users/{user}/posts/{post}', [PostController::class, 'show']);

// Type-hinted models are automatically resolved
public function show(Post $post, User $user)
{
    // $post and $user come as model instances
}
```

Real World Examples
-------------------

[](#real-world-examples)

### Example 1: E-commerce

[](#example-1-e-commerce)

```
// routes/web.php
Route::get('/shops/{shop}/categories/{category}/products/{product}', [ProductController::class, 'show']);

// ProductController.php - Any order you want
public function show(
    Request $request,
    Product $product,    // 3rd route parameter
    Category $category,  // 2nd route parameter
    Shop $shop          // 1st route parameter
) {
    // All matched correctly!
}
```

### Example 2: API Resource

[](#example-2-api-resource)

```
// routes/api.php
Route::get('/teams/{team}/members/{member}/tasks/{task}', [TaskController::class, 'show']);

// TaskController.php
public function show(Task $task, Member $member, Team $team)
{
    $this->authorize('view', [$task, $team]);

    return new TaskResource($task);
}
```

Testing
-------

[](#testing)

```
composer test
```

Contributing
------------

[](#contributing)

Pull requests are welcome!

License
-------

[](#license)

MIT License. See [LICENSE](LICENSE) for details.

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance73

Regular maintenance activity

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity44

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 ~0 days

Total

2

Last Release

151d ago

### Community

Maintainers

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

---

Top Contributors

[![UmutCanGungormus](https://avatars.githubusercontent.com/u/63198221?v=4)](https://github.com/UmutCanGungormus "UmutCanGungormus (3 commits)")

---

Tags

laravelparametersroutebindingnamed

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/umutcangungormus-laravel-named-route-binding/health.svg)

```
[![Health](https://phpackages.com/badges/umutcangungormus-laravel-named-route-binding/health.svg)](https://phpackages.com/packages/umutcangungormus-laravel-named-route-binding)
```

###  Alternatives

[timacdonald/has-parameters

A trait that allows you to pass arguments to Laravel middleware in a more PHP'ish way.

228271.7k2](/packages/timacdonald-has-parameters)[izniburak/laravel-auto-routes

Auto Route Generating (Auto-Discovery) Package for Laravel

23645.3k](/packages/izniburak-laravel-auto-routes)[illuminatech/url-trailing-slash

Allows enforcing URL routes with or without trailing slash

50216.9k](/packages/illuminatech-url-trailing-slash)[fragkp/laravel-route-breadcrumb

7011.7k](/packages/fragkp-laravel-route-breadcrumb)[amendozaaguiar/filament-route-statistics

Filament route statictics viewer

3225.0k1](/packages/amendozaaguiar-filament-route-statistics)[proai/lumen-annotations

Route and event binding annotations for Laravel Lumen

1012.4k](/packages/proai-lumen-annotations)

PHPackages © 2026

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