FOS Rest Bundle - 控制器必须 return 响应对象,但它 return 视图
FOS Rest Bundle - Controller must return Response object, but it returns View
我正在尝试在 symfony 4.2.3 上设置 FOS Rest Bundle。我正在学习本教程:
https://www.thinktocode.com/2018/03/26/symfony-4-rest-api-part-1-fosrestbundle/
安装并配置了包:
//annotations.yaml
rest_controller:
resource: ../../src/Controller/Rest/
type: annotation
prefix: /api
//fos_rest.yaml
fos_rest:
view:
view_response_listener: true
format_listener:
rules:
- { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json ] }
当我调用我的 ArticleController 对象的 postAction() 时,它看起来像:
class ArticleController extends FOSRestController
{
/**
* Creates an Article resource
* @Rest\Post("/articles")
* @param Request $request
* @return View
*/
public function postArticle(Request $request): View
{
$entityManager = $this->getDoctrine()->getManager();
$article = new Article();
$article->setTitle($request->get('title'));
$article->setContent($request->get('content'));
$articleCategory = $entityManager->getReference(ArticleCategory::class, $request->get('article_category'));
$article->setArticleCategory($articleCategory);
$article->setPublished($request->get('published'));
$entityManager->persist($article);
$entityManager->flush();
// In case our POST was a success we need to return a 201 HTTP CREATED response
return View::create($article, Response::HTTP_CREATED);
}
}
我收到错误消息(使用 Postman 进行测试):
控制器必须 return 一个 "Symfony\Component\HttpFoundation\Response" 对象,但它 returned 一个 FOS\RestBundle\View\View 类型的对象。
这是为什么?!它定义了 postArticle() 方法应该 return 一个 View 对象,我正在这样做。
一个通知:我的 class 正在扩展 FOSRestController class,它已被弃用。我也尝试扩展 AbstractFOSRestController,但结果相同。
所以,出于某种原因,我的 fos_rest.yaml 文件不在包目录中,它应该是全局的,但在包的测试子目录中。当我将它移到它所属的位置时,它开始工作了。
我正在尝试在 symfony 4.2.3 上设置 FOS Rest Bundle。我正在学习本教程:
https://www.thinktocode.com/2018/03/26/symfony-4-rest-api-part-1-fosrestbundle/
安装并配置了包:
//annotations.yaml
rest_controller:
resource: ../../src/Controller/Rest/
type: annotation
prefix: /api
//fos_rest.yaml
fos_rest:
view:
view_response_listener: true
format_listener:
rules:
- { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json ] }
当我调用我的 ArticleController 对象的 postAction() 时,它看起来像:
class ArticleController extends FOSRestController
{
/**
* Creates an Article resource
* @Rest\Post("/articles")
* @param Request $request
* @return View
*/
public function postArticle(Request $request): View
{
$entityManager = $this->getDoctrine()->getManager();
$article = new Article();
$article->setTitle($request->get('title'));
$article->setContent($request->get('content'));
$articleCategory = $entityManager->getReference(ArticleCategory::class, $request->get('article_category'));
$article->setArticleCategory($articleCategory);
$article->setPublished($request->get('published'));
$entityManager->persist($article);
$entityManager->flush();
// In case our POST was a success we need to return a 201 HTTP CREATED response
return View::create($article, Response::HTTP_CREATED);
}
}
我收到错误消息(使用 Postman 进行测试): 控制器必须 return 一个 "Symfony\Component\HttpFoundation\Response" 对象,但它 returned 一个 FOS\RestBundle\View\View 类型的对象。
这是为什么?!它定义了 postArticle() 方法应该 return 一个 View 对象,我正在这样做。
一个通知:我的 class 正在扩展 FOSRestController class,它已被弃用。我也尝试扩展 AbstractFOSRestController,但结果相同。
所以,出于某种原因,我的 fos_rest.yaml 文件不在包目录中,它应该是全局的,但在包的测试子目录中。当我将它移到它所属的位置时,它开始工作了。