0

我有两个实体作者和书

book     | manytoOne |author
id       |           |id
idAuthor |

在作者控制器中,我有一个 Action 函数,可以获取作者详细信息和他的所有书籍(使用 forward 函数获取书籍)

public function authorDetailsAction($id){

$author= $this->getDoctrine()->getRepository(Author::class)->find($id);

$books= $this->forward('AppBundle:Book:authorBooks',array('id' => $id));

return array('author' => $author, 'books' => $books);

}

但它只显示作者信息

或者当我只阅读书籍时,return $books我得到了这个错误

控制器必须返回一个响应(Array(0 => Object(AppBundle\Entity\Book), 1 => Object(AppBundle\Entity\Book), 2 => Object(AppBundle\Entity\Book)) 给定)。(500内部服务器错误)

提前感谢您的任何指导

4

2 回答 2

1

看起来您使用 API 平台,您可以在不创建自定义控制器的情况下实现您想要的:

  1. 向资源添加过滤器,Author以便能够按姓名搜索作者:https ://api-platform.com/docs/core/serialization-groups-and-relations#embedding-relations
  2. 在作者响应中直接嵌入与作者相关的书籍:https ://api-platform.com/docs/core/filters#search-filter 。
于 2017-08-23T08:54:43.393 回答
0

Symfony 控制器必须始终返回该类的实例Symfony\Component\HttpFoundation\Response。你不能简单地返回一个任意值,因为 Symfony 不知道如何渲染它。

Response在控制器中创建对象有两种方法:

首先,直接实例化。例如:

$response = new Response("This is my content.", 200);
$response->headers->set('Content-Type', 'text/plain');
return $response;

其次,如果您的控制器是 的子类Symfony\Bundle\FrameworkBundle\Controller\Controller,则可以使用该render()方法访问模板引擎:

$response = $this->render("foo/bar.html.twig", ["foo" => "bar"]);
$response->headers->set('Content-Type', 'text/plain');
return $response;

有关更多信息,请参阅https://symfony.com/doc/current/controller.html

于 2017-08-22T19:03:59.000 回答