mylesduncanking / laravel-auto-bind
Abililty to automatically bind properties in Laravel
v2.1.0
2025-07-02 13:30 UTC
Requires
- php: ^8.0|^8.1
README
Automatically bind route parameters to controller properties — clean, Laravel-native, and zero boilerplate.
Features
- ✅ Native route-model binding
- ✅ Reduce boilerplate in constructors
- ✅ Supports soft-deleted models
- ✅ Use custom columns (e.g.
slug
) - ✅ Easy to drop into existing Laravel apps
Installation
composer require mylesduncanking/laravel-auto-bind
Basic Usage
Add the #[AutoBindProperty]
attribute to each controller property you want to bind:
use MylesDuncanKing\AutoBind\AutoBindProperty; #[AutoBindProperty] public Client $client;
Use a Custom Column
#[AutoBindProperty(column: 'slug')] public Client $client;
Bind Soft Deleted Records
#[AutoBindProperty(withTrashed: ['restore'])] public Client $client;
Call bind()
in Your Constructor
use MylesDuncanKing\AutoBind\AutoBind; public function __construct() { AutoBind::bind($this); }
Tip: For DRY controllers, call AutoBind::bind($this)
in a base abstract controller and extend it.
Accessing Bound Properties
Use them like any class property:
public function read() { echo $this->client->id; }
Or inject into a view:
return view('clients.read', array_merge(AutoBind::bound(), compact('foo')));
Full Example
routes/web.php
Route::get('clients/{client}/{tab?}', [ClientsController::class, 'read'])->name('client.read');
ClientsController.php
use App\Models\Client; use MylesDuncanKing\AutoBind\AutoBind; use MylesDuncanKing\AutoBind\AutoBindProperty as AutoBind; class ClientsController extends \Illuminate\Routing\Controller { #[AutoBind(withTrashed: ['restore'])] public Client $client; public function __construct() { AutoBind::bind($this); } public function read($tab = 'index') { return view('clients.read', AutoBind::bound($this, compact('tab'))); } public function update() { $this->client->update( request()->validate(['name' => ['required', 'string', 'max:40']]) ); return redirect()->back(); } public function delete() { $this->client->delete(); return redirect()->route('clients'); } public function restore() { $this->client->restore(); return redirect()->route('clients'); } }
Why Laravel Auto Bind?
- ✨ Less boilerplate
- 🔁 Cleaner, focused controllers
- 🧠 No new magic — pure Laravel route binding
- 🔍 Fine-tune with soft deletes and custom columns
License
MIT