$routeName, 'page' => $pageNumber, 'pageSize' => $perPage ], $args); do { /** @var array $result */ $result = \forward_static_call_array([$apiClassName, 'paginate'], $args); $args['page'] = ++$pageNumber; foreach ($result as $row) { if (!is_array($row)) { throw new \ErrorException(\sprintf( 'Unexpected type for $row got %s', \gettype($row) )); } try { $saveCallback($row); } catch (ValidationException $e) { /** @var \Illuminate\Validation\Validator $validator */ $validator = $e->validator; /** @var array */ $failed = $validator->invalid(); $this->invalidRows[] = collect($row)->put('validation_message', collect($e->errors()) ->mapWithKeys(function (array $messages, string $attribute) use ($failed) { $verifiedValue = ''; if (array_key_exists($attribute, $failed)) { $verifiedValue = ' Valeur vérifiée : ' . \json_encode($failed[$attribute]); } return [ $attribute => collect($messages)->implode(', ') . $verifiedValue ]; })->implode(' '))->all(); } catch (ConnectException | RequestException $e) { // ! Guzzle SSL Error connection failure \report($e); $this->invalidRows[] = collect($row)->put('validation_message', $e->getMessage())->all(); }//end try }//end foreach } while (!empty($result)); } /** * Send an email with invalid rows * * @param array $uniqueKeys * @param string $jobClass * @return void */ protected function mailInvalidRows(array $uniqueKeys, string $jobClass) { /** @var array Unique Key columns */ $invalidRowKeys = []; $uniqueKeys = \array_merge(['validation_message'], $uniqueKeys); \collect($this->invalidRows) ->map(function ($invalidRow) use ($uniqueKeys, &$invalidRowKeys) { $o = []; foreach ($uniqueKeys as $uField) { $o[$uField] = $invalidRow[$uField]; } $invalidRowKeys[] = $o; }); if (!count($invalidRowKeys)) { return; } Mail::send('mails.invalidApiRows', [ 'invalidkeys' => $invalidRowKeys, 'jobClass' => $jobClass ], function ($m) { $m->to( config('mail.contactsList.invalidCafel'), sprintf('%s Exception Handler', config('app.name')) )->subject('There are invalid data sheets provided by Cafel api.'); }); } }