adrosoftware / laravel-model-presenter
A simple and elegant way to separate presentation logic from Laravel Eloquent models
Package info
github.com/adrorocker/laravel-model-presenter
pkg:composer/adrosoftware/laravel-model-presenter
Requires
- php: ^8.2
- illuminate/contracts: ^11.0 || ^12.0
- illuminate/database: ^11.0 || ^12.0
- illuminate/support: ^11.0 || ^12.0
- nesbot/carbon: ^2.0 || ^3.0
Requires (Dev)
- larastan/larastan: ^2.0 || ^3.0
- laravel/pint: ^1.0
- orchestra/testbench: ^9.0 || ^10.0
- pestphp/pest: ^2.0 || ^3.0
- phpstan/phpstan: ^1.0 || ^2.0
README
A simple and elegant way to separate presentation logic from your Laravel Eloquent models.
Introduction
The Presenter pattern helps keep your models clean by extracting presentation and formatting logic into dedicated presenter classes. Instead of cluttering your models with display-related methods, you can organize them in presenters.
Installation
composer require adrosoftware/laravel-model-presenter
Since version 1.2.0, the package is auto-discovered by Laravel, so no manual service provider registration is required.
Requirements
- PHP 8.2+
- Laravel 11 or 12
Version Compatibility
| PHP | Laravel 11 | Laravel 12 |
|---|---|---|
| 8.2 | ✅ | ✅ |
| 8.3 | ✅ | ✅ |
| 8.4 | ✅ | ✅ |
| 8.5 | ✅ | ✅ |
Quick Start
1. Create a Presenter
Create a presenter class that extends ModelPresenter:
<?php namespace App\Presenters; use AdroSoftware\LaravelModelPresenter\Presenter\Model\ModelPresenter; class UserPresenter extends ModelPresenter { public function fullName(): string { return "{$this->model->first_name} {$this->model->last_name}"; } public function formattedCreatedAt(): string { return $this->carbon($this->model->created_at)->format('F j, Y'); } }
2. Configure Your Model
Add the PresentModel trait and implement ModelPresentable interface:
<?php namespace App\Models; use AdroSoftware\LaravelModelPresenter\Presenter\Model\ModelPresentable; use AdroSoftware\LaravelModelPresenter\Presenter\Model\PresentModel; use App\Presenters\UserPresenter; use Illuminate\Database\Eloquent\Model; class User extends Model implements ModelPresentable { use PresentModel; protected string $presenter = UserPresenter::class; }
3. Use the Presenter
$user = User::find(1); // Access presenter methods echo $user->present()->fullName(); echo $user->present()->formattedCreatedAt(); // Access model attributes through the presenter echo $user->present()->email;
AI-Assisted Development
This package includes Laravel Boost guidelines for AI coding assistants. After installing, run php artisan boost:install to enable intelligent code suggestions.
Documentation
For detailed documentation, see the docs directory:
Testing
composer test
Static Analysis
composer analyse
Code Style
composer lint # Check code style composer lint:fix # Fix code style
License
MIT License. See LICENSE for more information.