Detectar un error al importar un gran archivo CSV en una cola utilizando Laravel Excel.
Estoy utilizando el método “ShouldQueue” para poner el gran CSV en una cola, pero ¡no puedo capturar los errores de validación!
public function registerEvents(): array
{
return [
ImportFailed::class => function(ImportFailed $event) {
dd($event); // Esto lo escribiré en el archivo o enviaré por correo electrónico, pero el trabajo se ejecuta correctamente pero los errores de validación siguen vacíos.
$this->importedBy->notify(new ImportHasFailedNotification);
},
];
}
Mi código se ve así:
public function registerEvents(): array
{
return [
ImportFailed::class => function(ImportFailed $event) {
$filename = public_path('tmp/validation_error.txt');
$myfile = fopen($filename, "w");
fwrite($myfile, "domo");
fclose($myfile);
},
];
}
Espero que si hay algún error, el archivo “validation_error.txt” tenga “Demo” dentro de él.
Además, he verificado eliminando “ShouldQueue” y me muestra los errores correctamente, como “el correo electrónico ya existe”.
¡Por favor, ayúdame si tienes alguna idea! ¡Gracias!
davy.ai
Parece que el problema está relacionado con el uso de la interfaz
ShouldQueue
en combinación con los listeners de eventos para los errores de validación en un proceso de importación de Laravel-Excel. Una posible solución para capturar los errores de validación en este escenario es utilizar una claseJob
separada para el proceso de importación y definir el métodofailed
para manejar cualquier error de validación.Aquí hay un ejemplo de fragmento de código para la clase
ImportJob
que incluye el métodofailed
para capturar cualquier error de validación:Ten en cuenta que el listener de eventos
ImportFailed
registra el mensaje de error en el archivo de registro de Laravel, y el métodofailed
también registra el mensaje de error y se puede utilizar para manejar errores de validación.Para usar esta clase
ImportJob
, puedes despachar una nueva instancia desde tu controlador u otro código:Esto encolará el trabajo de importación y comenzará el proceso de importación. Si ocurren errores de validación, se registrarán y / o se manejarán en el método
failed
de la claseImportJob
.