带有空参数的 SlimPHP 路由失败
SlimPHP route with empty parameter fails
我有这样的路线
/product/update/{productId}/part/{partId}
如果我尝试使用一个或多个空参数调用它,它将失败并给我一个 HTTP 404 Not Found,例如
https://localhost/product/update//part/xyz123
我不能将它们都设为可选,因为我仍然需要完整的 URL,包括 /part/
。
是否不能将空参数传递给使用 Slim 3 的路由?据我了解,在 URL 路径中允许有多个连续的斜线?
您可以通过显式定义它们将匹配的正则表达式来让参数匹配空字符串:
$app->get('/product/update/{productId:.*}/part/{partId:.*}', function ($request, $response, $args) {
$productId = !empty($args['productId']) ? $args['productId'] : 'not available';
$partId = !empty($args['partId']) ? $args['partId'] : 'not available';
return (sprintf('Product ID: %s, Part ID: %s', $productId, $partId));
});
// /product/update/1/part/2 -> Product ID: 1, Part ID: 2
// /product/update/1/part/ -> Product ID: 1, Part ID: not available
// /product/update//part/2 -> Product ID: not available, Part ID: 2
我有这样的路线
/product/update/{productId}/part/{partId}
如果我尝试使用一个或多个空参数调用它,它将失败并给我一个 HTTP 404 Not Found,例如
https://localhost/product/update//part/xyz123
我不能将它们都设为可选,因为我仍然需要完整的 URL,包括 /part/
。
是否不能将空参数传递给使用 Slim 3 的路由?据我了解,在 URL 路径中允许有多个连续的斜线?
您可以通过显式定义它们将匹配的正则表达式来让参数匹配空字符串:
$app->get('/product/update/{productId:.*}/part/{partId:.*}', function ($request, $response, $args) {
$productId = !empty($args['productId']) ? $args['productId'] : 'not available';
$partId = !empty($args['partId']) ? $args['partId'] : 'not available';
return (sprintf('Product ID: %s, Part ID: %s', $productId, $partId));
});
// /product/update/1/part/2 -> Product ID: 1, Part ID: 2
// /product/update/1/part/ -> Product ID: 1, Part ID: not available
// /product/update//part/2 -> Product ID: not available, Part ID: 2