Symfony 4 реализует REST API - PullRequest
       8

Symfony 4 реализует REST API

0 голосов
/ 05 декабря 2018

Я реализую простой REST API в моем проекте Symfony 4.Когда я тестирую функцию getArticle () с почтальоном, это ошибка:

Контроллер должен вернуть ответ (данный объект (FOS \ RestBundle \ View \ View)).

С содержимым var_dump ($ article) отображается, как и ожидалось, поэтому я думаю, что проблема может быть в FOSRestBundle, но я не знаю других способов сделать эту работу.

class ArticleController extends FOSRestController
{

/**
 * Retrieves an Article resource
 * @Rest\Get("/articles/{id}")
 */
public function getArticle(int $articleId): View
 {
    $em = $this->getDoctrine()->getManager();
    $article = $em->getRepository(Article::class)->findBy(array('id' => $articleId));

    // In case our GET was a success we need to return a 200 HTTP OK response with the request object
    return View::create($article, Response::HTTP_OK);
 }
}

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Я сам нашел решение, возвращающее HttpFoundation \ Response, оно может быть кому-то полезно.

/**
 * Lists all Articles.
 * @FOSRest\Get("/articles")
 */
public function getArticles(Request $request): Response
{
    $em = $this->getDoctrine()->getManager();
    $articles = $em->getRepository(Article::class)->findAll();

    return new Response($this->json($articles), Response::HTTP_OK);
}
0 голосов
/ 05 декабря 2018

Определите прослушиватель ответов в вашем config / packages / fos_rest.yamlЧтобы узнать, почему и для чего это нужно, прочитайте документацию FOSRest здесь .

fos_rest:
  view:
    view_response_listener:  true

Также добавьте это в ваш fos_rest.yaml, чтобы выбрать выходной формат -> здесь json

fos_rest:
  [...] 
  format_listener:
    rules:
      - { path: ^/, prefer_extension: true, fallback_format: json, priorities: [ json ] }
...