This route will work just fine for a URL like http://localhost:8080/promos/130-unburdened.pdf
Route::get('/{report_slug}/{report_code}{burdening_tag?}{extension?}', function($report_slug, $report_code, $burdening_tag='', $extension='') {
return "report_slug: ${report_slug}<br>report_code: ${report_code}<br>burdening_tag: $burdening_tag<br>extension: $extension";
});
But if I add another optional parameter before the {extension?}
, which is what I really need, it will fail, no matter what:
Route::get('/{report_slug}/{report_code}{burdening_tag?}{something?}{extension?}', function($report_slug, $report_code, $burdening_tag='', $something='', $extension='') {
return "report_slug: ${report_slug}<br>report_code: ${report_code}<br>burdening_tag: $burdening_tag<br>extension: $extension";
});
All of the optional parameters have patterns defined, so that they CANNOT match the wrong thing:
Route::pattern('report_code', '[0-9]+');
Route::pattern('burdening_tag', '(-burdened|-unburdened)');
Route::pattern('something', 'X');
Route::pattern('extension', '(\.pdf|\.xlsx|\.xls|\.csv)');
Route::pattern('report_slug',
'(adplan|adplan-update|adplan-proof'
.'|scandown'
.'|promos|promo-updates'
.'|promos-finance|promos-cost-proof'
.'|retail-price-proof'
.'|finance'
.'|dsd-promos|managed-dsd-promos'
.'|anchor-group)'
);
And yet one works and the other crashes and burns. What is wrong? Is Laravel limited to 2 optional parameters? Is this a bug in Laravel?