PHP :可选和必需参数的精简组合
PHP : Slim Combination of Optional and Required Param
我想要以下类型的路线。
$app->get('/FetchImages/{catid}[/{subcatid}]/{page}', function ($request, $response, $args) {
//Code
});
在我想要的路线中:
- 类别 - 必填
- 子类别 - 可选
- 页面 - 必填
我可以在一条路线上完成吗?如果可以,如何实现?我想为这些路径设置一个函数:
{catid}/{page}
{catid}/{subcatid}/{page}
可选后不能有强制占位符。如果你尝试,fastRoute(路由器,被 Slim 使用)会给你一个错误。
即使我们从 Slim 和 fastRoute 中抽象出来,我也建议您重新考虑 API 的 URL 结构。
自然是强制在前,可选在后。
为了能够对路由使用相同的回调,我建议您传递 page
作为查询参数:
$this->get('/FetchImages/{categoryId}[/{subcategoryId}]', function($request, $response, $args) {
$categoryId = $args['categoryId'];
$subcategoryId = $args['subcategoryId'];
// Get requested page value.
// It defaults to null if no page specified
$page = $request->getQueryParam('page', null);
});
并像这样发送请求:
GET http://myapp.com/FetchImages/kittens/dangerous?page=2
在这种情况下,您可以自由地跳过或跳过页面,并且URL结构仍然很干净。
您可以像这样使用相同的回调创建 2 个路由。这不是一个完美的解决方案,但您不必将页面放在查询参数中。
$myCallback = function($request, $response, $args) {
$catid = $args['catid'];
$subcatid = isset($args['subcatid']) ? $args['subcatid'] : null;
$page = $args['page'];
// do other stuff
};
$app->get('/FetchImages/{catid}/{page}', $myCallback);
$app->get('/FetchImages/{catid}/{subcatid}/{page}', $myCallback);
我想要以下类型的路线。
$app->get('/FetchImages/{catid}[/{subcatid}]/{page}', function ($request, $response, $args) {
//Code
});
在我想要的路线中:
- 类别 - 必填
- 子类别 - 可选
- 页面 - 必填
我可以在一条路线上完成吗?如果可以,如何实现?我想为这些路径设置一个函数:
{catid}/{page}
{catid}/{subcatid}/{page}
可选后不能有强制占位符。如果你尝试,fastRoute(路由器,被 Slim 使用)会给你一个错误。
即使我们从 Slim 和 fastRoute 中抽象出来,我也建议您重新考虑 API 的 URL 结构。 自然是强制在前,可选在后。
为了能够对路由使用相同的回调,我建议您传递 page
作为查询参数:
$this->get('/FetchImages/{categoryId}[/{subcategoryId}]', function($request, $response, $args) {
$categoryId = $args['categoryId'];
$subcategoryId = $args['subcategoryId'];
// Get requested page value.
// It defaults to null if no page specified
$page = $request->getQueryParam('page', null);
});
并像这样发送请求:
GET http://myapp.com/FetchImages/kittens/dangerous?page=2
在这种情况下,您可以自由地跳过或跳过页面,并且URL结构仍然很干净。
您可以像这样使用相同的回调创建 2 个路由。这不是一个完美的解决方案,但您不必将页面放在查询参数中。
$myCallback = function($request, $response, $args) {
$catid = $args['catid'];
$subcatid = isset($args['subcatid']) ? $args['subcatid'] : null;
$page = $args['page'];
// do other stuff
};
$app->get('/FetchImages/{catid}/{page}', $myCallback);
$app->get('/FetchImages/{catid}/{subcatid}/{page}', $myCallback);