0

目前我用 symfony2 和教义 2 开发了一个 rest-api-app。我的 API 应该具有通过查询字符串过滤结果的功能。例如,以下网址: http://example.com/api/users?orderBy=username%20DESC&limit=20

我可以将查询字符串解析为parse_str($this->getRequest()->getQueryString(), $queryString);assoc 数组。是否有任何函数可以提交数组并且学说选择相应的结果?就像是$users = $this->getDoctrine()->getRepository('UserBundle:User')->findByQueryString($queryString);

4

2 回答 2

1

正如 AdrienBrault 所说,不要使用parse_str,而是将其放入您的控制器中:

$orderBy = $this->get('request')->query->get('orderBy');
$limit = $this->get('request')->query->get('limit');
$rep = $this->getDoctrine()->getRepository('UserBundle:User');
$users = $rep->findLimitOrderBy($orderBy, $limit);

在您的用户存储库类中:

public function findLimitOrderBy($orderBy, $limit)
{
$query = $this->getEntityManager()
    ->createQuery('
    SELECT u FROM UserBundle:User u
    ORDER BY u.'.$orderBy
    )
    ->setMaxResults($limit);

    return $query->getResult();
}
于 2012-11-01T21:37:42.013 回答
0

您不应该使用parse_str来访问查询字符串参数。

您可以使用 访问 ParametersBag $request->query。你可以得到一个数组$request->query->all()

您可以使用findBy存储库的方法,该方法接受具有以下格式的数组:

array(
    'field' => 'value',
    'field2' => 'value2',
)

所以你可以做

$users = $userRepository->findBy($request->query->all());

但它不支持该orderBy参数。

于 2012-11-01T20:30:43.103 回答