我创建了一个具有 OneToMany 关系的小型 CRUD 系统,并且还想创建一个小型 API。
我生成了一个新的 ApiBundle 并为我的 1 个实体添加了 1 个控制器,如下所示:
<?php
namespace ApiBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\Controller\FOSRestController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\View\View;
use DataBundle\Entity\Job;
class JobController extends FOSRestController
{
public function getAction()
{
$result = $this->getDoctrine()->getRepository('DataBundle:Job')->findAll();
if ($result === null) {
return new View("There are no jobs in the database", Response::HTTP_NOT_FOUND);
}
return $result;
}
public function idAction($id)
{
$result = $this->getDoctrine()->getRepository('DataBundle:Job')->find($id);
if($result === null) {
return new View("Job not found", Response::HTTP_NOT_FOUND);
}
return $result;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用 /api/jobs 时,出现以下错误:
未捕获的 PHP 异常 LogicException:“控制器必须返回响应(给出的 Array(0 => Object(DataBundle\Entity\Job), 1 => Object(DataBundle\Entity\Job))”。
有人知道我在这里做错了什么吗?
任何帮助表示赞赏!
提前谢谢了 :)
小智 7
该错误告诉您返回响应。像这样的东西:
return new Response(
'There are no jobs in the database',
Response::HTTP_OK
);
Run Code Online (Sandbox Code Playgroud)
或者如果你想要一个 json 响应,你可以这样做
return new JsonResponse(
[
'message' => 'There are no jobs in the database',
]
Response::HTTP_OK
);
Run Code Online (Sandbox Code Playgroud)
Alv*_*unk -1
你能试试这个吗:
$view = $this->view($result, Response::HTTP_OK);
return $view;
Run Code Online (Sandbox Code Playgroud)
让我们知道这是否有效。