FOSRestBundle 有一个非常酷的param fetcher listener。使用它,您可以使用注释定义查询字符串参数,是否允许它们为空,设置默认值,定义要求。根据您的示例参数,我猜到了一些值
/**
* @QueryParam(name="vendorID", requirements="\d+", strict=true, description="vendor id")
* @QueryParam(name="destination", nullable=true, description="restrict search to given destination")
* @QueryParam(name="type", nullable=true, description="restrict search to given type")
* @QueryParam(name="sort", requirements="(price|foo|bar)", default="price", description="sort search according to price, foo or bar")
* @QueryParam(name="dir", requirements="(ASC|DESC)", default="ASC", description="sort search ascending or descending")
*/
public function getProducts(ParamFetcher $paramFetcher)
{
$vendorID = $paramFetcher->get('vendorID');
// and so on
}
对于构建查询构建器,使用具有默认值的参数非常简单,因为它们永远不会被未定义的值填充。对于严格的参数,这也没有问题,因为400 Bad Request
如果它丢失或不符合要求,严格的参数会引发 a。只有使用可为空的参数,您才必须在将条件添加到查询构建器之前检查 not null。
顺便提一句。看看NelmioApiDocBundle,它为每个动作生成@ApiDoc
一个很好的文档注释。它还解析参数获取器注释。非常便利。