Efforlessly manage your Eloquent model revisions in Filament. It includes:
- A Filament page to show the Diff of what has changed and who changed it
- A list of Revisions by different users
- A Restore action to restore the model to any state
You can install the package via composer:
composer require mansoor/filament-versionable
Then, publish the config file and migrations:
php artisan vendor:publish --provider="Overtrue\LaravelVersionable\ServiceProvider"
Finally, run the migration:
php artisan migrate
Add Overtrue\LaravelVersionable\Versionable
trait to your model and set $versionable
attributes.
NOTE: Make sure to add protected $versionStrategy = VersionStrategy::SNAPSHOT;
This would save all the $versionable attributes when any of them changed. There are different bug reports on using VersionStrategy::DIFF
use Overtrue\LaravelVersionable\VersionStrategy;
class Post extends Model
{
use Overtrue\LaravelVersionable\Versionable;
protected $versionable = ['title', 'content'];
protected $versionStrategy = VersionStrategy::SNAPSHOT;
}
Create a Revisons Resource page to show Revisions, it should extend the Mansoor\FilamentVersionable\RevisionsPage
. If you were to create a Revisions page for ArticleResource
, it would look like:
namespace App\Filament\Resources\ArticleResource\Pages;
use App\Filament\Resources\ArticleResource;
use Mansoor\FilamentVersionable\RevisionsPage;
class ArticleRevisions extends RevisionsPage
{
protected static string $resource = ArticleResource::class;
}
Next, Add the ArticleRevisions page (that you just created) to your Resource
use App\Filament\Resources\ArticleResource\Pages;
public static function getPages(): array
{
return [
...
'revisions' => Pages\ArticleRevisions::route('/{record}/revisions'),
];
}
Add RevisionsAction
to your edit/view pages, this action would only appear when there are any versions for the model you are viewing/editing.
use Mansoor\FilamentVersionable\Page\RevisionsAction;
protected function getHeaderActions(): array
{
return [
RevisionsAction::make(),
];
}
You can also add the RevisionsAction
to your table.
use Mansoor\FilamentVersionable\Table\RevisionsAction;
$table->actions([
RevisionsAction::make(),
]);
You are all set! Your app should store the model states and you can manage them in Filament.
If you want to change the UI for Revisions page, you may publish the publish the views to do so.
php artisan vendor:publish --tag="filament-versionable-views"
If you want more control over how the versions are stored, you may read the Laravel Versionable Docs.
You can easily remove/strip HTML tags from the diff by just overriding shouldStripTags
method inside your revisions page.
class ArticleRevisions extends RevisionsPage
{
protected static string $resource = ArticleResource::class;
public function shouldStripTags(): bool
{
return true;
}
}
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.