命名参数通常作为路段完成,但没有明确的命名。因此,例如,您可以这样做:
Route:get('test/{id?}/{page?}/{opt?}', function ($id = null, $page = null, $opt = null) {
// do something
});
$id、$page 和 $opt 在此处都是可选的,由段定义中的 ? 定义,并且它们在函数中具有默认值。但是,您会注意到这里有一些问题:
- 它们必须以正确的顺序出现在 URL 中
- 只有
$opt 是真正可选的,如果$opt 是,则必须提供$page,如果$page 是,则必须提供$id
这是 Laravel 将命名段映射到函数/方法参数的方式带来的限制。但是,理论上您可以实现自己的逻辑来完成这项工作:
Route:get('test/{first?}/{second?}/{third?}', function ($first = null, $second = null, $third = null) {
if ($first) {
list($name, $value) = @explode('=', $first, 2);
$$name = $value;
}
if ($second) {
list($name, $value) = @explode('=', $second, 2);
$$name = $value;
}
if ($third) {
list($name, $value) = @explode('=', $third, 2);
$$name = $value;
}
// you should now have $id, $page and $opt defined if they were specified in the segments
});
并不是说这是一个非常幼稚的解决方案,依靠= 的盲目爆炸以及设置任意输入变量的名称(这显然是在自找麻烦)。您应该在此代码中添加更多检查,但它应该让您了解如何克服上述两个问题。
可能应该指出,这有点违背在 Laravel 中进行路由和 URI 的“正确方式”,所以除非你真的需要这个功能,否则你应该重新考虑你的形成方式将这些 URI 转换为 Laravel 框架更适合设置的方式。