Installation
composer require agence-dnd-bundle/csv-converter
Ensure your Laravel project uses Symfony 4.4+ (compatible with Laravel 6+).
First Use Case: Convert CSV to Array
use AgenceDndBundle\CsvConverter\CsvConverter;
$converter = new CsvConverter();
$data = $converter->convertToArray('path/to/file.csv');
Key Files
src/CsvConverter.php: Core converter logic.src/Exception/: Custom exceptions (e.g., InvalidCsvException).CSV to Array (Common Use)
$converter = new CsvConverter(['delimiter' => ';']);
$rows = $converter->convertToArray('import.csv');
Array to CSV (Export)
$converter->convertToCsv($rows, 'export.csv');
Streaming Large Files
$converter->setStreaming(true);
$converter->convertToArray('large_file.csv');
Laravel Service Provider Bind the converter to the container for dependency injection:
$this->app->singleton(CsvConverter::class, function ($app) {
return new CsvConverter(['delimiter' => ';']);
});
Form Request Validation Validate uploaded CSV files:
use Illuminate\Http\Request;
public function import(Request $request) {
$request->validate([
'file' => 'required|file|csv',
]);
}
Queue Jobs for Heavy Processing Offload conversion to a queue:
dispatch(new ConvertCsvJob($filePath, $destination));
Encoding Issues
iconv() or mb_convert_encoding() if encountering garbled text:
$converter->setEncoding('UTF-8');
Memory Limits
$converter->setStreaming(false);
Delimiter Assumptions
,; explicitly set for edge cases:
$converter->setDelimiter(';');
Log Errors Wrap conversions in try-catch:
try {
$data = $converter->convertToArray('file.csv');
} catch (\Exception $e) {
\Log::error("CSV Conversion Failed: " . $e->getMessage());
}
Validate Headers Check for missing columns early:
if (!isset($data[0]['expected_column'])) {
throw new \RuntimeException("Missing required column");
}
Custom Parsers
Extend CsvConverter to add logic:
class CustomCsvConverter extends CsvConverter {
protected function parseRow($row) {
// Custom logic
return parent::parseRow($row);
}
}
Event Listeners Trigger events on conversion:
$converter->onConvert(function ($data) {
// Post-processing
});
Configuration Override defaults via constructor:
$converter = new CsvConverter([
'delimiter' => '|',
'enclosure' => '"',
'escape' => '\\',
]);
How can I help you explore Laravel packages today?