我一直围着这个圈子走了一圈。我要么得到500个错误,说模板无法呈现或找不到,或者当我尝试使用注释时,它们与我使用Symfony的注释为我的路线发生冲突。使用当前代码,我只是得到了404。
我的配置:
# config.yml
fos_rest:
routing_loader:
default_format: json
我的控制器的一个例子:
namespace IGIG\GigBundle\Controller;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Controller\Annotations\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use IGIG\GigBundle\Document\Gig;
class GigApiController extends FOSRestController
{
public function getGigsAction()
{
$gigs = $this->get('doctrine_mongodb')
->getRepository('IGIGGigBundle:Gig')
->findAll();
$view = $this->view($gigs, 200)
->setTemplate("IGIG:GigBundle:getGigs.html.twig")
->setTemplateVar('gigs');
return $this->handleView($view);
}
}
路由
gigs:
prefix: /api
type: rest
resource: IGIG\GigBundle\Controller\GigApiController
我还应该补充一下,控制器内的.html.twig文件实际上并不存在,我的印象是它是自动生成的,是这样吗?
提前致谢!
答案 0 :(得分:5)
首先看起来你的配置没有正确缩进,但也可能只是一个复制/粘贴错误,否则它应该为你抛出异常。
# config.yml
fos_rest:
routing_loader:
default_format: json
我还应该补充一点,控制器中的.html.twig文件实际上并不存在,我的印象是它是自动生成的,是这样吗?
不,您需要自己生成该模板文件,这可能是导致500错误的原因。但是,如果您不打算在REST API旁边使用twig模板,那么如果您只想返回JSON响应,那么您根本不需要它们,并且也可以从控制器中删除调用
对于你的404:做一个./app/console router:debug | grep api
并查看生成的路线是否与你期望的一样。
您应该再次查看捆绑文档,特别是完整的配置参考:https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Resources/doc/configuration-reference.md
当我开始使用Symfony的REST API时,我发现这非常有用:http://welcometothebundle.com/symfony2-rest-api-the-best-2013-way/