spatie/laravel-dashboard-belgian-trains-tile
Laravel Dashboard tile that shows Belgian train connections and their status. Install it in a Spatie Laravel Dashboard to display live updates for selected routes as a simple, glanceable tile.
composer require spatie/laravel-dashboard-belgian-trains-tile
php artisan vendor:publish --provider="Spatie\BelgianTrainsTile\BelgianTrainsTileServiceProvider"
config/dashboard.php):
'tiles' => [
\Spatie\BelgianTrainsTile\BelgianTrainsTile::class,
],
use Spatie\BelgianTrainsTile\BelgianTrainsTile;
public function mount()
{
$this->tiles[] = BelgianTrainsTile::class;
}
Display real-time Belgian train connections for a specific station (e.g., Brussels Central) on your dashboard:
// In your Livewire component or dashboard config
BelgianTrainsTile::new()
->station('BRU') // Brussels Central
->departuresOnly() // Optional: Show only departures
->limit(5); // Show top 5 results
Basic Integration
Customizing Station and Query Parameters
BelgianTrainsTile::new()
->station($request->input('station_code'))
->departuresOnly($showDepartures)
->limit($request->input('limit', 5));
Extending with Additional Data
// In a custom Livewire component
public function render()
{
return view('livewire.custom-train-tile', [
'trainData' => BelgianTrainsTile::new()->station('BRU')->getData(),
'userNotes' => $this->getUserNotes(),
]);
}
Timezone Handling
// Ensure app timezone is set (e.g., Europe/Brussels)
config(['app.timezone' => 'Europe/Brussels']);
Error Handling and Fallbacks
try {
$tile = BelgianTrainsTile::new()->station('BRU')->getData();
} catch (\Exception $e) {
$tile = ['error' => 'Train data unavailable. Retry later.'];
}
$cacheKey = 'belgian_trains_'.md5($station);
$trainData = Cache::remember($cacheKey, now()->addMinutes(15), function () use ($station) {
return BelgianTrainsTile::new()->station($station)->getData();
});
// In your Livewire component
public function getTranslation()
{
return __('train_status.' . $this->trainData['status']);
}
// In a PHPUnit test
BelgianTrainsTile::shouldReceive('fetchData')
->once()
->andReturn(['status' => 'delayed']);
Timezone Misalignment
Europe/Brussels or a compatible Belgian timezone..env:
APP_TIMEZONE=Europe/Brussels
now()->format('H:i') in your tile’s view.NMBS API Rate Limits
Hardcoded Station Codes
BRU for Brussels Central), which may not be intuitive for end users.$stationCode = StationMapper::getCode($userInput);
BelgianTrainsTile::new()->station($stationCode);
Livewire Version Conflicts
laravel-dashboard and livewire packages are compatible:
composer require laravel-dashboard:^4.0 livewire:^3.0
Limited Customization
php artisan vendor:publish --tag=belgian-trains-tile-views
Then modify resources/views/vendor/belgian-trains-tile/....API Response Inspection
BelgianTrainsTile::new()->station('BRU')->getData();
// Add a tap() method or use a debugger to inspect the response.
Timezone Debugging
with(new DateTimeZone('Europe/Brussels'), function () {
$tile = BelgianTrainsTile::new()->station('BRU');
// Test rendering
});
Error Handling
try {
$tileData = BelgianTrainsTile::new()->station('BRU')->getData();
} catch (\Exception $e) {
Log::error('Belgian Trains Tile Error: ' . $e->getMessage());
$tileData = ['error' => 'Failed to load train data.'];
}
Custom Data Sources
fetchData method to use a different API or data source:
BelgianTrainsTile::macro('customFetch', function () {
return $this->fetchDataFromCustomSource();
});
Additional Metrics
BelgianTrainsTile::macro('withMetrics', function () {
$data = $this->getData();
$data['metrics'] = $this->calculateMetrics($data);
return $data;
});
Multi-Station Support
BelgianTrainsTile::macro('multiStation', function (array $stations) {
$tiles = [];
foreach ($stations as $station) {
$tiles[] = BelgianTrainsTile::new()->station($station)->getData();
}
return ['stations' => $tiles];
});
Real-Time Updates
public $refreshInterval = 60; // seconds
public function updatedRefreshInterval()
{
$this->dispatch('refresh-tile');
}
How can I help you explore Laravel packages today?