我要一种类似的路线。
$app->get('/FetchImages/{catid}[/{subcatid}]/{page}', function ($request, $response, $args) {
//Code
});在路线上,我想:
我能在一条路上做吗?如果是的话,怎样才能做到呢?我希望对这些路径有一个函数:
{catid}/{page}
{catid}/{subcatid}/{page}发布于 2017-07-18 19:20:27
不能在可选之后使用强制占位符。如果您尝试,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结构仍然非常干净。
发布于 2017-07-19 17:11:05
您可以使用相同的回调创建两个路径,如下所示。这不是一个完美的解决方案,但您不必将页面放入查询参数中。
$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);https://stackoverflow.com/questions/45158244
复制相似问题