/** * @ApiDoc() */ public function cgetAction(ParamFetcher $paramFetcher, Request $request) { $dynamicRequestParam = new QueryParam(); $dynamicRequestParam->name = "limit"; $dynamicRequestParam->requirements = "\\d+"; $dynamicRequestParam->default = '25'; $paramFetcher->addParam($dynamicRequestParam); $dynamicRequestParam = new QueryParam(); $dynamicRequestParam->name = "start"; $dynamicRequestParam->requirements = "\\d+"; $dynamicRequestParam->default = '0'; $paramFetcher->addParam($dynamicRequestParam); $dynamicRequestParam = new QueryParam(); $dynamicRequestParam->name = "sort"; $dynamicRequestParam->requirements = "[\\w_]+"; $dynamicRequestParam->default = null; $paramFetcher->addParam($dynamicRequestParam); $dynamicRequestParam = new QueryParam(); $dynamicRequestParam->name = "filter"; $dynamicRequestParam->default = null; $paramFetcher->addParam($dynamicRequestParam); $dynamicRequestParam = new QueryParam(); $dynamicRequestParam->name = "query"; $dynamicRequestParam->default = null; $paramFetcher->addParam($dynamicRequestParam); $select = $this->_getSelect($paramFetcher, $request); $restColumns = array_keys($this->_model->getSerializationColumns(array('rest_read', 'rest'))); $exprColumns = $this->_model->getExprColumns(); foreach (array_intersect($restColumns, $exprColumns) as $i) { $select->expr($i); } $rows = $this->_model->getRows($select); foreach ($rows as $row) { $this->denyAccessUnlessGranted('read', $row); } $view = View::create(); $view->setData(array('data' => $rows, 'total' => $this->_model->countRows($select))); $ctx = new Context(); $ctx->setGroups(array('rest_read', 'rest')); $view->setContext($ctx); return $view; }
/** * Add parameter manually to @Rest\QueryParam */ protected function addQueryParam(\FOS\RestBundle\Request\ParamFetcher $paramFetcher, $paramArray) { $param = new Rest\QueryParam(); foreach ($paramArray as $key => $value) { if (!property_exists($param, $key)) { throw new UnprocessableEntityHttpException(); } $param->{$key} = $value; } $paramFetcher->addParam($param); return $paramFetcher; }