Api平台请求问题

时间:2017-08-22 15:17:26

标签: symfony api-platform.com

我有两个实体作者和书

book     | manytoOne |author
id       |           |id
idAuthor |

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

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内部服务器错误)

提前感谢任何指导

2 个答案:

答案 0 :(得分:1)

看起来您使用的是API平台,无需创建自定义控制器即可实现您的目标:

  1. array[1][@"name"]资源添加过滤器,以便能够按名称搜索作者:https://api-platform.com/docs/core/serialization-groups-and-relations#embedding-relations
  2. 直接在作者回复中嵌入与作者相关的书籍:https://api-platform.com/docs/core/filters#search-filter

答案 1 :(得分: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