Я реализую простой 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);
}
}
И хотя это немного не по теме, я думаю, что API-платформа мог бы быть более широко используемым подходом.
Я пробовал оба метода, но ни один из них не работает. Платформа API хороша, но мне нужен собственный контроллер.
Вам нужно использовать return $this->handleView($view);, а не возвращать объект View.
return $ this-> handleView ($ view) выдает ошибку: «Вы запросили несуществующую службу» fos_rest.view_handler.






Определите прослушиватель ответа представления в файле 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 не существует, и если я попытаюсь его создать, дампы проекта.
При установке пакета fos rest, он должен был запросить установку стороннего рецепта для создания базовой конфигурации. Может быть, попробуйте удалить и переустановить пакет fos rest и установить этот рецепт. Тогда должен быть доступен fos_rest.yaml.
Я уже пробовал и все еще не работает, возможно, FOSRestBundle устарел.
Я бы сказал, похоже, что ваш проект сломан. Рецепт должен создать этот файл. Попробуйте переустановить весь проект. Если это все еще не работает, опубликуйте свой composer.json.
Я сам нашел решение, вернув 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.
Я сам не использую пакет, но беглая проверка документы, похоже, показывает использование "$ view = $ this-> view ($ products, 200)" для создания представления вместо View :: create, а также " return $ this-> handleView ($ view); " Вы следите за другой статьей или руководством?