laravel-request-chronicle maintained by plakhin
Save incoming HTTP requests into the DB
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.