Saltar al contenido principal

Action de restauración

Introducción

Filament incluye una action que puede restaurar registros Eloquent eliminados suavemente. Cuando se hace clic en el botón de activación, un modal pide confirmación al usuario. Puedes usarla de esta manera:

use Filament\Actions\RestoreAction;

RestoreAction::make()

O si deseas agregarla como una action masiva de tabla, para que el usuario pueda elegir qué filas restaurar, usa Filament\Actions\RestoreBulkAction:

use Filament\Actions\RestoreBulkAction;
use Filament\Tables\Table;

public function table(Table $table): Table
{
return $table
->toolbarActions([
RestoreBulkAction::make(),
]);
}

Redirigir después de restaurar

Puedes configurar una redirección personalizada cuando se envía el formulario usando el método successRedirectUrl():

use Filament\Actions\RestoreAction;

RestoreAction::make()
->successRedirectUrl(route('posts.list'))
Información de inyección de utilidades

Además de $record, la función successRedirectUrl() puede inyectar varias utilidades como parámetros.

Personalizar la notificación de restauración

Cuando el registro se restaura exitosamente, se envía una notificación al usuario, que indica el éxito de su acción.

Para personalizar el título de esta notificación, usa el método successNotificationTitle():

use Filament\Actions\RestoreAction;

RestoreAction::make()
->successNotificationTitle('User restored')
Información de inyección de utilidades

Además de permitir un valor estático, el método successNotificationTitle() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.

Puedes personalizar toda la notificación usando el método successNotification():

use Filament\Actions\RestoreAction;
use Filament\Notifications\Notification;

RestoreAction::make()
->successNotification(
Notification::make()
->success()
->title('User restored')
->body('The user has been restored successfully.'),
)
Información de inyección de utilidades

Además de permitir un valor estático, el método successNotification() también acepta una función para calcularlo dinámicamente. Puedes inyectar varias utilidades en la función como parámetros.

Para deshabilitar la notificación por completo, usa el método successNotification(null):

use Filament\Actions\RestoreAction;

RestoreAction::make()
->successNotification(null)

Hooks de ciclo de vida

Puedes usar los métodos before() y after() para ejecutar código antes y después de que se restaure un registro:

use Filament\Actions\RestoreAction;

RestoreAction::make()
->before(function () {
// ...
})
->after(function () {
// ...
})
Información de inyección de utilidades

Estas funciones hook pueden inyectar varias utilidades como parámetros.

Mejorar el rendimiento de las actions de restauración masiva

De forma predeterminada, el RestoreBulkAction cargará todos los registros Eloquent en memoria, antes de recorrerlos y restaurarlos uno por uno.

Si estás restaurando un gran número de registros, es posible que desees usar el método chunkSelectedRecords() para obtener un número menor de registros a la vez. Esto reducirá el uso de memoria de tu aplicación:

use Filament\Actions\RestoreBulkAction;

RestoreBulkAction::make()
->chunkSelectedRecords(250)

Filament carga los registros Eloquent en memoria antes de restaurarlos por dos razones:

  • Para permitir que los registros individuales en la colección sean autorizados con una policy de modelo antes de la restauración (usando authorizeIndividualRecords('restore'), por ejemplo).
  • Para asegurar que los eventos del modelo se ejecuten al restaurar registros, como los eventos restoring y restored en un observer de modelo.

Si no requieres autorización de policy de registros individuales y eventos de modelo, puedes usar el método fetchSelectedRecords(false), que no obtendrá los registros en memoria antes de restaurarlos, y en su lugar los restaurará en una sola consulta:

use Filament\Actions\RestoreBulkAction;

RestoreBulkAction::make()
->fetchSelectedRecords(false)