【发布时间】:2014-08-01 23:12:39
【问题描述】:
这个路由对于像http://localhost:8080/promos/130-unburdened.pdf这样的URL来说很好用
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";
});
但是如果我在{extension?}之前添加另一个可选参数,这是我真正需要的,它会失败,无论如何:
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";
});
所有可选参数都定义了模式,因此它们不能匹配错误的东西:
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)'
);
然而一个工作,另一个崩溃和燃烧。怎么了? Laravel 是否仅限于 2 个可选参数?这是 Laravel 的错误吗?
【问题讨论】:
-
当然你不能有2个可选参数,至少不是你这样做的方式?见stackoverflow.com/questions/22649764/… 和stackoverflow.com/questions/22877725/…
-
为什么不能有 2 个或更多可选参数?这些模式限制了它们,因此 Laravel 应该 匹配没有问题。
-
我不想处理任意数量的无约束参数,例如第二个问题。而且我不确定第一个问题为什么或如何相关。
-
它们都是关于多条可选路线,我认为这与您面临的问题相同
-
我的非常不同,因为我指定了 完全 什么可以匹配(以及什么不能匹配)。在 #1 中,他有 2 个参数,但我可以让 2 个参数正常工作。