plakhin/laravel-request-chronicle

Save incoming HTTP requests into the DB

1.1.1 2025-02-24 08:47 UTC

This package is auto-updated.

Last update: 2025-05-12 15:34:44 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status GitHub PHPStan Action Status Total Downloads

Installation

You can install the package via composer:

composer require plakhin/laravel-request-chronicle

Then you may optionally publish the config file with:

php artisan vendor:publish --tag="request-chronicle-config"

This is the contents of the published config file:

return [
    'table_name' => 'request_chronicle',
    'prune_after_hours' => 24 * 7,
];

Then you need to publish and run the migrations with:

php artisan vendor:publish --tag="request-chronicle-migrations"
php artisan migrate

Usage

If you want to save every HTTP request to the database, you may append it to the global middleware stack in your application's bootstrap/app.php file:

use Plakhin\RequestChronicle\Http\Middleware\SaveRequest;

->withMiddleware(function (Middleware $middleware) {
     $middleware->append(SaveRequest::class);
})

You can also apply the middleware to a specific route(s) only. Additionally you can specify the model you wish attach (using MorphTo relationship) requests to, Route Model Binding should be used in this case:

use App\Models\YourModel;
use Plakhin\RequestChronicle\Http\Middleware\SaveRequest;

Route::get('{model:slug}/test', function (YourModel $model) {
    //
})->middleware(SaveRequest::class.':model');

All the requests will be stored in the database table specified in the config.

You can retrieve the requests using the Request model:

use Plakhin\RequestChronicle\Models\Request;

$requests = Request::all();

You can also add the MorphMany relationship to your model:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphMany;

class YourModel extends Model
{
    public function requests(): MorphMany
    {
        return $this->morphMany(Request::class, 'model');
    }
}

Pruning the database table

The Request model uses the Laravel's MassPrunable trait. In the config file, you can specify the number of hours to keep records using prune_after_hours key and then to schedule the model:prune command, as instructed in Laravel's docs. You'll have to explicitly add the model class:

// in bootstrap/app.php

->withSchedule(function (Schedule $schedule) {
    $schedule->command('model:prune', [
        '--model' => [
            \Plakhin\RequestChronicle\Models\Request::class,
        ],
    ])->daily();
})

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Credits

License

The MIT License (MIT). Please see License File for more information.