deifhelt / laravel-activity-presenter
Activity presenter for Laravel.
Fund package maintenance!
deifhelt
Installs: 6
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
pkg:composer/deifhelt/laravel-activity-presenter
Requires
- php: ^8.1
- illuminate/contracts: ^10.0||^11.0||^12.0
- spatie/laravel-activitylog: ^4.10
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^2.0||^3.0
- laravel/pint: ^1.10
- nunomaduro/collision: ^7.0||^8.0
- orchestra/testbench: ^8.0||^9.0||^10.0
- pestphp/pest: ^2.34||^3.0
- pestphp/pest-plugin-arch: ^2.7||^3.0
- pestphp/pest-plugin-laravel: ^2.0||^3.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan-deprecation-rules: ^1.0||^2.0
- phpstan/phpstan-phpunit: ^1.0||^2.0
- spatie/laravel-ray: ^1.35
This package is auto-updated.
Last update: 2026-01-08 05:05:57 UTC
README
Laravel Activity Presenter is a powerful presentation layer for spatie/laravel-activitylog. It solves the common challenges of displaying activity logs in your application: resolving relationships efficiently, formatting data consistently, and handling translations.
Why use this?
When displaying activity logs, you often face these issues:
- N+1 Queries: Showing "User X updated Project Y" requires loading the User and Project models for every log entry.
- Missing Context: If "Project Y" is deleted, you still want to show its name in the log history, but the relationship is null.
- Unformatted Data: You have
user_id: 5in the log properties, but you want to display "John Doe". - Inconsistent Presentation: You find yourself repeating
trans('...')...logic in every Blade view.
This package solves all of them.
Key Features
- 🚀 Smart Resolution: Automatically resolves related models (User, Subject) in a single optimized query to prevent N+1 issues.
- 💎 Unified DTO: Transforms raw log data into a consistent
ActivityPresentationDTOclass for easy use in Views and APIs. - 🔌 Config-Driven: Define how specific attributes (like
category_id) map to models in a simple config file. - 🌍 Auto-Localization: Built-in support for translating events (
created->Creado), model names (User->Usuario), and attributes. - 🛡️ Graceful Fallbacks: If a related model is permanently deleted, it gracefully falls back to historical data (e.g., "Project #123").
Installation
Install via Composer (Spatie Activitylog is included automatically):
composer require deifhelt/laravel-activity-presenter
Publish the configuration:
php artisan vendor:publish --provider="Deifhelt\ActivityPresenter\ActivityPresenterServiceProvider"
Quick Usage
1. In your Controller
use Deifhelt\ActivityPresenter\Facades\ActivityPresenter; use Spatie\Activitylog\Models\Activity; public function index() { // Fetch logs (paginated) $activities = Activity::latest()->paginate(20); // Present them (loads relations, formats dates, translates events) $presented = ActivityPresenter::presentCollection($activities); return view('activities.index', [ 'activities' => $presented ]); }
2. In your Blade View
@foreach($activities as $activity) <div class="activity-item"> <span class="date">{{ $activity->diff }}</span> <!-- "John Doe created Project Alpha" --> <p> <strong>{{ $activity->user_name }}</strong> {{ $activity->event }} <strong>{{ $activity->subject_name }}</strong> </p> <!-- Show changes: "Status: Pending -> Active" --> <ul> @foreach($activity->new_values as $key => $value) <li> {{ $key }}: <span class="text-red-500">{{ $activity->old_values[$key] ?? 'N/A' }}</span> → <span class="text-green-500">{{ $value }}</span> </li> @endforeach </ul> </div> @endforeach
Documentation
- Installation & Configuration - Deep dive into setup and config options.
- Logging Guide - Best practices for logging model events.
- Usage Patterns - Advanced usage in Controllers, Views, and APIs.
- Localization - How to translate every aspect of your logs.
License
The MIT License (MIT). Please see License File for more information.