路由在FOSRestBundle和Symfony中不起作用

时间:2014-06-09 23:46:48

标签: php rest symfony fosrestbundle

我一直围着这个圈子走了一圈。我要么得到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文件实际上并不存在,我的印象是它是自动生成的,是这样吗?

提前致谢!

1 个答案:

答案 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/