Symfony1 Symfony 1-为每个AJAX请求自动设置JSON内容类型

Symfony1 Symfony 1-为每个AJAX请求自动设置JSON内容类型,symfony1,Symfony1,在我的Web应用程序中,我总是用JSON回复AJAX调用。 因此,我发现自己在很多行动中都这样做: if ($request->isXmlHttpRequest()) { $this->getResponse()->setHttpHeader('Content-type', 'application/json'); return $this->renderText(json_encode($details)); } 有没有一种方法可以自动获取:只要请求是

在我的Web应用程序中,我总是用JSON回复AJAX调用。
因此,我发现自己在很多行动中都这样做:

if ($request->isXmlHttpRequest()) {
    $this->getResponse()->setHttpHeader('Content-type', 'application/json');
    return $this->renderText(json_encode($details));
}
有没有一种方法可以自动获取:只要请求是AJAX,内容类型就是JSON

我想我应该使用一个过滤器,也许,但我不熟悉的过滤器,也许有一个更好的解决方案

任何建议都是非常受欢迎的

谢谢,

我解决问题的方法:

创建一个新类
myActions
,该类从
sfActions
扩展而来。在此类中创建一个新函数
renderJson($data)

现在让您的控制器类继承自
myActions
(而不是
sfActions
)。在控制器的末尾,只需返回$this->renderJson($data)


(我还做了一些模板设计。在renderJson中,如果配置中设置了
sf_debug
,并且没有通过XmlHttp请求它。)

我在我的一个项目中使用了类似的技术,但我建议也看看iPhone优化。您可以将路由设置为接受格式,并基于该格式返回相应的模板。然后,您不需要设置标头,因为它是由请求的格式设置的

当然,这意味着您需要为每个输出模板创建单独的模板文件(这似乎很麻烦),或者使用特定的布局文件并跳过模板。因此,最终它可能相当于几乎相同的东西(或者至少是相同数量的代码)

protected function renderJson($data) {
  $this->getResponse()->setHttpHeader('Content-type', 'application/json');
  return $this->renderText(json_encode($data));
}