Hola a todos,
Estoy haciendo una API y uso Symfony 2.7. Mi problema radica cuando intento eliminar un registro, según el error el servicio no existe, pero el servicio existe y es funcional pues los métodos Get, POST y PUT funcionan.
Estos son los métodos del controlador:
/** * Removes a community. * * @ApiDoc( * resource = true, * statusCodes={ * 204="Returned when successful" * } * ) * * @param int $id the community id * @return array|View|null */ public function deleteCommunityAction($id) { try { if (!($community = $this->get($id))) { throw $this->createNotFoundException("Community does not exist."); } else { $this->get('app.handler.community_handler')->delete($community); return $this->routeRedirectView('get_communities', Codes::HTTP_NO_CONTENT); } } catch (InvalidFormException $exception) { return $exception->getForm(); } } /** * Removes a community. * * @ApiDoc( * resource = true, * statusCodes={ * 204="Returned when successful", * 404="Returned when the community is not found" * } * ) * * @param int $id the community id * @return RouteRedirectView */ public function removeCommunityAction($id) { return $this->deleteCommunityAction($id); }
Y estos son los métodos en el Handler
/** * Remove a Community * @param CommunityInterface $community * @param array $parameters * @param string $method * @return bool */ public function processDelete(CommunityInterface $community, array $parameters, $method = "DELETE") { $this->em->remove($community); $this->em->flush(); return true; } /** * Delete a community * * @param CommunityInterface $community * @param array $parameters * * @return bool */ public function delete(CommunityInterface $community, array $parameters) { return $this->processForm($community, $parameters, 'DELETE'); }
Espero que alguno pueda ayudarme con mi problema,
Gracias.
Respuestas
Me temo que sólo con esta información no vamos a poder descubrir la causa del error. Seguramente, en el mensaje de error te pone la línea exacta que está causando el problema y con suerte, algo más de información de contexto. Si esa información no es privada, ¿podrías pegarla aquí para tener más pistas sobre qué está sucediendo?
Por otra parte, quizás debes hacerlo de esa manera, pero en Symfony 2.7 el objeto Response
ya define constantes para todos los estados de HTTP. Así que en vez de Codes:: HTTP_NO_CONTENT
ya puedes hacer Response::HTTP_NO_CONTENT
.
@javiereguiluz
Hola, en la linea de código !($community = $this->get($id))
de la acción deleteCommunityAction
podria ser el problema, Ya que $this->get($id)
en los controladres que extienden del controlador base de symfony se utilizar para obtener un servicio, como por ejemplo tu lo has hecho con $this->get('app.handler.community_handler')
.
Al parecer estas intentando obtener un registro (no se si de la base de datos) a partir de su id, por lo que deberás obtenerlo haciendo uso de algún repositorio de esas comunidades.
@manuel_j555
Hola Javier, gracias por la respuesta, pues logré solucionarlo colocando un método aparte para realizar la búsqueda, de esta forma:
public function deleteCommunityAction($id) { try { $community = $this->getOr404($id); $this->get('app.handler.community_handler')->delete($community); } catch (InvalidFormException $exception) { return $exception->getForm(); } return $this->routeRedirectView('get_communities'); } protected function getOr404($id) { if (!($community = $this->get('app.handler.community_handler')->get($id))) { throw new NotFoundHttpException(sprintf('The resource \'%s\' was not found.', $id)); } return $community; }
De esta manera me funcionó.
Gracias
@miguelplazasr