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

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

The controller must return a response (Object(FOS\RestBundle\View\View) given).

При использовании var_dump ($ articles) содержимое отображается должным образом, поэтому я предполагаю, что проблема может заключаться в 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);
 }
}

Я сам не использую пакет, но беглая проверка документы, похоже, показывает использование "$ view = $ this-> view ($ products, 200)" для создания представления вместо View :: create, а также " return $ this-> handleView ($ view); " Вы следите за другой статьей или руководством?

Cerad 05.12.2018 15:45

И хотя это немного не по теме, я думаю, что API-платформа мог бы быть более широко используемым подходом.

Cerad 05.12.2018 15:48

Я пробовал оба метода, но ни один из них не работает. Платформа API хороша, но мне нужен собственный контроллер.

gipsy 05.12.2018 15:53

Вам нужно использовать return $this->handleView($view);, а не возвращать объект View.

naththedeveloper 05.12.2018 16:29

return $ this-> handleView ($ view) выдает ошибку: «Вы запросили несуществующую службу» fos_rest.view_handler.

gipsy 05.12.2018 16:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
3 007
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Определите прослушиватель ответа представления в файле 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 ] }

Я читал документацию, но проблема в том, что config / packages / fos_rest.yaml не существует, и если я попытаюсь его создать, дампы проекта.

gipsy 05.12.2018 16:36

При установке пакета fos rest, он должен был запросить установку стороннего рецепта для создания базовой конфигурации. Может быть, попробуйте удалить и переустановить пакет fos rest и установить этот рецепт. Тогда должен быть доступен fos_rest.yaml.

scriptibus 06.12.2018 08:06

Я уже пробовал и все еще не работает, возможно, FOSRestBundle устарел.

gipsy 06.12.2018 09:24

Я бы сказал, похоже, что ваш проект сломан. Рецепт должен создать этот файл. Попробуйте переустановить весь проект. Если это все еще не работает, опубликуйте свой composer.json.

scriptibus 07.12.2018 10:36
Ответ принят как подходящий

Я сам нашел решение, вернув 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);
}

Рад, что у вас что-то работает. Возможно, вы также захотите взглянуть на JsonResponse. Но, чтобы вы знали, это решение - просто готовое решение для Symfony. Ничего общего с пакетом api.

Cerad 07.12.2018 19:53

Другие вопросы по теме