Utilizará el matching con criteria donde los parámetros filters realizarán "field like %value%". */ public function cgetAction(ParamFetcherInterface $paramFetcher) { $em = $this->getDoctrine()->getManager(); $disableTenancy = false; $filters = !is_null($paramFetcher->get('filters')) ? $paramFetcher->get('filters') : array(); if (isset($filters['tenancyId'])) { // tengo que buscar por tenencia. $tenancyService = $this->container->get('base_tenancy.tenancy_service'); $tenancyService->setTenancy($filters['tenancyId']); unset($filters['tenancyId']); } if (isset($filters['disableTenancy'])) { $disableTenancy = true; // tengo que buscar por tenencia. $tenancyService = $this->container->get('base_tenancy.tenancy_service'); $tenancyService->disableFilter(); unset($filters['disableTenancy']); } if (isset($filters['qb-criteria'])) { try { unset($filters['qb-criteria']); $criteria = new \Doctrine\Common\Collections\Criteria(); foreach ($filters as $field => $value) { $criteria->andWhere($criteria->expr()->contains("$field", "$value")); } if (!is_null($paramFetcher->get('offset'))) { $criteria->setFirstResult($paramFetcher->get('offset')); } if (!is_null($paramFetcher->get('limit'))) { $criteria->setMaxResults($paramFetcher->get('limit')); } if ($paramFetcher->get('order_by')) { $order_by = $paramFetcher->get('order_by'); $orderBy = array(); foreach ($order_by as $field => $order) { $orderBy[$field] = $order; } $criteria->orderBy($orderBy); } $repo = $em->getRepository($this->getRepository()); $entities = $repo->matching($criteria)->toArray(); if($disableTenancy) $tenancyService->enableFilter(); if ($entities) { return $entities; } } catch (\Exception $e) { return FOSView::create($e->getMessage(), Codes::HTTP_INTERNAL_SERVER_ERROR); } } else { try { $offset = $paramFetcher->get('offset'); $limit = $paramFetcher->get('limit'); $order_by = $paramFetcher->get('order_by'); $entities = $em->getRepository($this->getRepository())->findBy($filters, $order_by, $limit, $offset); if($disableTenancy) $tenancyService->enableFilter(); if ($entities) { return $entities; } } catch (\Exception $e) { return FOSView::create($e->getMessage(), Codes::HTTP_INTERNAL_SERVER_ERROR); } } return array(); } /** * @return object Retorna el nombre de la Entity de trabajo. */ public function getObject() { $obj = $this->getDoctrine()->getManager()->getMetadataFactory()->getMetadataFor($this->getRepository())->getName(); $rc = new ReflectionClass($obj); return $rc->newInstance(); } /** * Create a Client entity. * * @View(statusCode=201, serializerEnableMaxDepthChecks=true) * * @param Request $request Contiene el request. * * @return FOSView|mixed Retorna el FOSView o la entidad. * */ public function postAction(Request $request) { // file_put_contents("/tmp/t", "LLEGO\n",8); $entity = $this->getObject(); $form = $this->createForm($this->getFormEntityType(), $entity, array("method" => $request->getMethod())); $this->removeExtraFields($request, $form); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($entity); $em->flush(); return $entity; } return FOSView::create(array('errors' => $form->getErrors()), Codes::HTTP_INTERNAL_SERVER_ERROR); } /** * Update a Client entity. * * @View(serializerEnableMaxDepthChecks=true) * * @param Request $request Contiene el request. * @param mixed $entity Contiene la entidad * * @return FOSView|mixed Retorna el FOSView o la entidad. */ public function putAction(Request $request, $entity = null) { try { $em = $this->getDoctrine()->getManager(); $request->setMethod('PATCH'); //Treat all PUTs as PATCH $form = $this->createForm($this->getFormEntityType(), $entity, array("method" => $request->getMethod())); $this->removeExtraFields($request, $form); $form->handleRequest($request); if ($form->isValid()) { $em->flush(); return $entity; } return FOSView::create(array('errors' => $form->getErrors()), Codes::HTTP_INTERNAL_SERVER_ERROR); } catch (\Exception $e) { return FOSView::create($e->getMessage(), Codes::HTTP_INTERNAL_SERVER_ERROR); } } /** * Partial Update to a Client entity. * * @View(serializerEnableMaxDepthChecks=true) * * @param Request $request Contiene el request. * @param mixed $entity Contiene la entidad. * * @return Response Retorna un response. */ public function patchAction(Request $request, $entity) { return $this->putAction($request, $entity); } /** * Delete a Client entity. * * @View(statusCode=204) * * @param Request $request Contiene el request. * @param mixed $entity Contiene la entidad a borrar. * * @return FOSView Retorna el FSOView. */ public function deleteAction(Request $request, $entity) { try { $em = $this->getDoctrine()->getManager(); $em->remove($entity); $em->flush(); return null; } catch (\Exception $e) { return FOSView::create($e->getMessage(), Codes::HTTP_INTERNAL_SERVER_ERROR); } } /** * Get a Client entity * * @View(serializerEnableMaxDepthChecks=true) * * @param mixed $entity Contiene la entidad. * * @return Response * */ public function getAction($entity) { return $entity; } }