我想要以下类型的路线。
$app->get('/FetchImages/{catid}[/{subcatid}]/{page}', function ($request, $response, $args) {
//Code
});
在路线中我想要跟随:
我可以在一条路线上完成吗?如果是这样,怎么能实现呢?我想为这些路径提供一个函数:
{catid}/{page}
{catid}/{subcatid}/{page}
答案 0 :(得分:0)
在可选后,您不能拥有强制占位符。如果你尝试,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结构仍然非常干净。
答案 1 :(得分:0)
您可以使用相同的回调创建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);