adrosoftware/laravel-model-presenter

A simple and elegant way to separate presentation logic from Laravel Eloquent models

Maintainers

Package info

github.com/adrorocker/laravel-model-presenter

pkg:composer/adrosoftware/laravel-model-presenter

Statistics

Installs: 551

Dependents: 1

Suggesters: 1

Stars: 1

Open Issues: 0

1.2.0 2026-02-27 22:17 UTC

This package is auto-updated.

Last update: 2026-02-28 00:03:10 UTC


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.