Parar el lifecycle de Filament a través de `halt`
En este post quería introducir un concepto de Filament que no conocía y que me contó mi compañero Ismael.
Durante la ejecución del lifecycle de las acciones de Filament (`beforeValidate`, afterValidate
, beforeCreate
, afterCreate
, beforeSave
, afterSave
, etc.) es posible llamar a una función que para por completo el lifecycle. Esto es especialmente útil para casos en los que quieres permitir al usuario rellenar el formulario y ejecutar una validación extra antes de, por ejemplo, guardarlo.
Imagina el caso de un acceso a Filament por suscripción. Ciertas características son posibles, pero solamente es posible añadir hasta X recursos. Al intentar guardar el item X + 1, debería mostrarse una alerta al usuario de que no es posible:
use Filament\Notifications\Actions\Action;
use Filament\Notifications\Notification;
protected function beforeCreate(): void
{
if (! $this->record->team->subscribed()) {
Notification::make()
->warning()
->title('You don\'t have an active subscription!')
->body('Choose a plan to continue.')
->persistent()
->actions([
Action::make('subscribe')
->button()
->url(route('subscribe'), shouldOpenInNewTab: true),
])
->send();
$this->halt();
}
}
Aquí, al llamar a $this->halt();
, se para por completo el lifecycle de Filament y no se termina de crear el registro, haciéndolo perfecto para añadir este tipo de validaciones.