[英]Creating multiple query parameters on the endpoint- REST API WordPress
[英]Symfony REST API: query with multiple parameters
如何实现根据URL中提供的参数返回服务列表的方法?
因此,如果没有参数,则返回所有服务。 如果提供了用户和类别,则按两个参数进行过滤。 如果仅提供用户或仅提供类别,则按参数之一进行过滤。
/**
* @Route("/", name="api_services_search")
* @Method("GET")
* @ApiDoc(
* section = "Service",
* description="Search services",
* parameters={
* {"name"="category", "dataType"="int", "required"=true, "description"="Category ID"}
* {"name"="user", "dataType"="int", "required"=true, "description"="User ID"}
* },
* output="CoreBundle\Entity\Service"
* )
*/
public function searchAction(Request $request){
$categoryId = $request->query->get('category');
$userId = $request->query->get('user');
$result = new JsonResponse();
if($categoryId){
$category = $this->getDoctrine()->getRepository('CoreBundle:ServiceCategory')->find($categoryId);
if($category == null){
throw new ApiException('category not found');
}
$serviceList = $this->getDoctrine()
->getRepository('CoreBundle:Service')->findBy(array('serviceCategory' => $category));
}
else if($userId){
$user = $this->getDoctrine()->getRepository('CoreBundle:BasicUser')->find($userId);
if($user == null){
throw new ApiException('user not found');
}
$serviceList = $this->getDoctrine()
->getRepository('CoreBundle:Service')->findBy(array('basicUser' => $user));
} else{
$serviceList = $this->getDoctrine()
->getRepository('CoreBundle:Service')->findAll();
}
$serviceListJson = $this->serializeDataObjectToJson($serviceList);
$result->setContent($serviceListJson);
return $result;
}
范例网址:
http://127.0.0.1:8000/api/v1/services/?category=3&user=4
我有错误:
Too many parameters: the query defines 1 parameters and you bound 2 (500 Internal Server Error)
我也在寻找可维护的解决方案,将来可以在其中轻松地向URL添加更多参数
我会选择这样的东西。 恐怕您无法通过查询参数添加/编辑使它更通用且不可知。
/**
* Controller action
*/
public function searchAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$serviceList = $em->getRepository('CoreBundle:Service')->fetchFromFilters([
'serviceCategory' => $request->query->get('category'),
'basicUser' => $request->query->get('user'),
]);
$serviceListJson = $this->serializeDataObjectToJson($serviceList);
$result = new JsonResponse();
$result->setContent($serviceListJson);
return $result;
}
/**
* Repository fetching method
*/
public function fetchFromFilter(array $filters)
{
$qb = $this->createQueryBuilder('s');
if (null !== $filters['serviceCategory']) {
$qb
->andWhere('s.serciceCategory = :serviceCategory')
->setParameter('serviceCategory', $filters['serviceCategory'])
;
}
if (null !== $filters['basicUser']) {
$qb
->andWhere('s.basicUser = :basicUser')
->setParameter('basicUser', $filters['basicUser'])
;
}
return $qb->getQuery()->getResult();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.