alex-kassel / history-engine
Storage-agnostic history engine for Laravel.
v1.0.2
2025-08-12 16:10 UTC
Requires
- php: ^8.1
- illuminate/cache: ^10.0|^11.0
- illuminate/contracts: ^10.0|^11.0
- illuminate/redis: ^10.0|^11.0
- illuminate/session: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
README
History Engine for Laravel
Speicherunabhängige History-Verwaltung mit Session/Cache/Redis-Storage und LNavi-kompatiblen String-Befehlen (<<
, <
, >
, >>
, <>(n)
).
Installation
- Paket installieren
composer require alex-kassel/history-engine
- Konfiguration veröffentlichen (optional)
php artisan vendor:publish --tag=history-engine-config
.env
Beispiele:
HISTORY_ENGINE_DRIVER=session # session | cache | redis
HISTORY_ENGINE_PREFIX=history_engine:
HISTORY_ENGINE_CACHE_STORE=redis
HISTORY_ENGINE_REDIS_CONNECTION=default
HISTORY_ENGINE_TTL=86400
Verwendung
use AlexKassel\HistoryEngine\Facades\HistoryEngine as History; // Engine für einen Scope erzeugen (z. B. "search") $engine = History::engine('search'); // Eintrag anfügen (Duplikate am Ende werden ignoriert) $engine->record('.:h:c:>1000;:b:c:/~200..400'); // Navigation per LNavi-Steuerung $engine->applyCommand('<<'); // Start $engine->applyCommand('<'); // Schritt zurück $engine->applyCommand('>'); // Schritt vor $engine->applyCommand('>>'); // Ende $engine->applyCommand('<>3'); // Zu Index 3 (0-basiert) // Oder explizite Methoden $engine->goToStart(); $engine->stepBack(2); $engine->goToIndex(5); $engine->goToEnd(); // Auslesen $current = $engine->getCurrent(); $pointer = $engine->getPointer(); $all = $engine->getAll(); // Leeren $engine->clear();
Treiber
- Session (Standard)
- Cache (Store/TTL konfigurierbar)
- Redis (Connection/TTL konfigurierbar)
Eigenen Treiber registrieren
use AlexKassel\HistoryEngine\Contracts\HistoryStore; use AlexKassel\HistoryEngine\HistoryManager; class MyStore implements HistoryStore { public function load(string $key): array { /* ... */ } public function save(string $key, array $data): void { /* ... */ } public function clear(string $key): void { /* ... */ } } // App\Providers\AppServiceProvider::boot() $this->app->afterResolving(HistoryManager::class, function (HistoryManager $manager) { $manager->extend('my', function ($app, array $cfg) { return new MyStore(/* ... */); }); });
Hinweise
- Indizierung ist 0-basiert (analog zur LNavi-Implementierung).
- Wird in der Mitte der History ein neuer Eintrag aufgenommen, wird der Vorwärts-Zweig abgeschnitten.
Veröffentlichung auf Packagist
- Neues Git-Repo erstellen (z. B. GitHub) und Code pushen.
composer.json
mit PSR-4 prüfen. - Auf
packagist.org
einloggen und „Submit“ → Git-URL angeben. - Webhook/Auto-Updates aktivieren (GitHub Service Hook für Packagist).
- Installation:
composer require alex-kassel/history-engine
.