关于此问题有很多话题,但我找到的答案都没有为我工作。
我想使用FOSRestBundle构建一个返回JSON的API(现在,我将来可能会添加XML)。
当我向我的路线发出请求时,我有以下例外:
[
{
message: "Unable to find template "".",
class: "InvalidArgumentException",
...
我有一个动态构建路由的控制器。我配置了json格式,并返回一个带有数据数组的View,以便在json中进行序列化。如果不使用FOSRestBundle,我会返回一个JSONResponse并完成它,但正如我所说的,我最终会在将来添加其他格式,所以我想以正确的方式做事。
这是我的路线:
categories:
type: rest
resource: Certiz\Bundle\ExamBundle\Controller\CategoryController
prefix: /api
requirements:
_format: "json"
我要求以下路线: / API /类别
我的config.yml:
fos_rest:
view:
formats:
json: true
xml: false
html: false
rss: false
templating_formats:
json: true
xml: false
html: false
rss: false
view_response_listener: 'force'
routing_loader:
default_format: json
include_format: true
exception:
codes:
'Symfony\Component\Security\Core\Exception\InsufficientAuthenticationException': 401
messages:
'Symfony\Component\Security\Core\Exception\InsufficientAuthenticationException': true
jms_serializer:
metadata:
directories:
exam:
namespace_prefix: "Certiz\\Bundle\\ExamBundle"
path: "@CertizExamBundle/Resources/config/serializer"
我的控制员:
public function getCategoriesAction()
{
$categories = $this
->getDoctrine()
->getManager()
->getRepository('Certiz\Bundle\ExamBundle\Entity\Category')
->getTree();
return View::create()
->setStatusCode(200)
->setData($categories)
;
} // "get_categories" [GET] /categories
我使用symfony 2.5和FOSRestBundle 1.4.2。
此致
答案 0 :(得分:3)
我发现了什么问题。在我的fos_rest config.yml中,我说json格式的响应应该由模板引擎而不是序列化程序来管理。
我将配置更改为:
fos_rest:
view:
templating_formats:
json: false
答案 1 :(得分:2)
来自FOSRestBundle文档:
格式和templating_formats设置决定了哪些格式 分别由序列化器和模板支持 层。换句话说,templating_formats中列出的任何格式都将 需要一个模板来使用模板服务进行渲染 格式中列出的任何格式都将使用序列化程序进行渲染。 对于这两个设置,值false表示给定格式 禁用。
因此我认为您应该从配置中排除未使用的格式,并留下您真正需要的内容,以使您的内容更具可读性:
fos_rest:
view:
formats:
json: true
templating_formats:
html: true