autobus-php/autobus-bus-export-bundle
Installation
composer require autobus-php/autobus-bus-export-bundle
Add to config/bundles.php (Symfony 4.4+):
return [
// ...
Autobus\BusExportBundle\AutobusBusExportBundle::class => ['all' => true],
];
First Use Case: Exporting a Command Result
Define a command that returns a CommandResult (e.g., from autobus-php/autobus):
use Autobus\BusExportBundle\Command\ExportCommand;
use Autobus\BusExportBundle\Command\ExportCommandResult;
class MyExportCommand extends ExportCommand
{
protected function execute(): ExportCommandResult
{
return new ExportCommandResult(
'my_export.csv',
['header1', 'header2'],
[['data1', 'data2'], ['data3', 'data4']]
);
}
}
Register the command in config/services.yaml:
services:
App\Command\MyExportCommand:
tags: ['console.command']
Trigger Export Run via CLI:
php bin/console app:my-export
Outputs to var/exports/my_export.csv (default path).
Command-Based Exports
Extend ExportCommand for CSV/JSON exports:
class UserExportCommand extends ExportCommand
{
public function __construct(private UserRepository $users)
{
}
protected function execute(): ExportCommandResult
{
$users = $this->users->findAll();
$headers = ['id', 'name', 'email'];
$rows = array_map(fn ($user) => [$user->id, $user->name, $user->email], $users);
return new ExportCommandResult(
'users_' . now()->format('Y-m-d') . '.csv',
$headers,
$rows
);
}
}
Dynamic File Naming
Use now() or request data for unique filenames:
return new ExportCommandResult(
'report_' . $request->get('filter') . '_' . now()->timestamp . '.json',
['key', 'value'],
$data
);
Integration with Symfony Events Dispatch events before/after export (e.g., logging, notifications):
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Autobus\BusExportBundle\Event\ExportEvent;
class ExportLogger implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
ExportEvent::PRE_EXPORT => 'onPreExport',
ExportEvent::POST_EXPORT => 'onPostExport',
];
}
public function onPreExport(ExportEvent $event): void
{
// Log start or validate data
}
public function onPostExport(ExportEvent $event): void
{
// Send email with export link
}
}
Custom Export Formats
Override ExportCommandResult to support new formats (e.g., Excel):
class ExcelExportCommandResult extends ExportCommandResult
{
public function __construct(string $filename, array $data)
{
parent::__construct($filename, [], $data);
}
public function getFormat(): string
{
return 'xlsx';
}
}
File Path Configuration
var/exports/. Override in config/packages/autobus_bus_export.yaml:
autobus_bus_export:
export_dir: '%kernel.project_dir%/public/exports'
chmod -R 775 var/exports).Memory Limits
$chunkSize = 1000;
foreach (array_chunk($bigArray, $chunkSize) as $chunk) {
$this->exportService->exportChunk($chunk, $filename);
}
CSV Encoding Issues
é, ü) may corrupt CSV. Use UTF-8 BOM or encode manually:
$csv = fopen('php://output', 'w');
fputcsv($csv, $headers, ',', '"');
foreach ($rows as $row) {
fputcsv($csv, array_map('utf8_encode', $row), ',', '"');
}
Command Naming Conflicts
app:export-users vs. app:export-orders).Verify Export Path
Check ExportCommand::getExportPath() for correct directory. Log the path if issues arise:
$this->logger->info('Export path:', ['path' => $this->getExportPath()]);
Validate Data Structure
Ensure $headers and $rows are consistent in length. Use:
assert(count($headers) === count($rows[0]), 'Headers/rows mismatch');
Symfony Cache Clearing After modifying bundle config, clear cache:
php bin/console cache:clear
Custom Writers
Implement Autobus\BusExportBundle\Writer\WriterInterface for new formats (e.g., PDF):
class PdfWriter implements WriterInterface
{
public function write(string $filename, array $data): void
{
// Use Dompdf or similar
}
}
Register in services:
services:
App\Writer\PdfWriter:
tags: ['autobus_bus_export.writer']
Pre/Post-Export Hooks
Subscribe to ExportEvent::PRE_EXPORT/POST_EXPORT for validation/notification logic (see Workflows above).
Dependency Injection
Inject services (e.g., UserRepository) into commands for dynamic data:
class ExportCommand extends ExportCommand
{
public function __construct(private ExportService $exportService)
{
}
}
How can I help you explore Laravel packages today?