Php symfony如何选择内容类型?

Php symfony如何选择内容类型?,php,symfony1,content-type,Php,Symfony1,Content Type,框架使用它来 自动管理内容类型 基于请求的响应的 URI扩展 如上所述,.js扩展有3种不同的内容类型,symfony如何选择最终的内容类型?我想您可能会关注这一点(本例使用样式表,但原理相同): //在view.yml中 indexSuccess: 样式表:[主,纸张:{media:print}] //在行动中 $this->getResponse()->addStylesheet('paper','',array('media'=>'print')); //在模板中 //结果视图 From

框架使用它来 自动管理内容类型 基于请求的响应的 URI扩展


如上所述,
.js
扩展有3种不同的内容类型,symfony如何选择最终的内容类型?

我想您可能会关注这一点(本例使用样式表,但原理相同):

//在view.yml中
indexSuccess:
样式表:[主,纸张:{media:print}]
//在行动中
$this->getResponse()->addStylesheet('paper','',array('media'=>'print'));
//在模板中
//结果视图

From:

如果没有特别设置内容类型,响应将返回列表中的第一项

sfWebRequest

// In the view.yml
indexSuccess:
  stylesheets: [main, paper: { media: print }]

// In the Action
$this->getResponse()->addStylesheet('paper', '', array('media' => 'print'));

// In the template
<?php use_stylesheet('paper', '', array('media' => 'print')) ?>

// Resulting View
<link rel="stylesheet" type="text/css" media="print" href="/css/paper.css" />

$this->formats
包含您在问题中指定的mime类型映射的扩展列表,因为它们是为请求对象指定的。

为什么不以
js
为例呢?因为css只有一个内容类型,所以它不会解释任何东西原则是相同的,请检查以下示例:。。。否则我一定是误解了你的问题。唯一的问题是symfony在有很多内容类型时如何选择一个作为内容类型?如果你是对的,
js
将返回
application/javascript
作为MIME,但这不是问题所在case@user198729您看到的内容类型是什么?另外,这个JS文件是通过Symfony提供的吗?如果文件系统中存在JS文件,则web服务器负责为内容类型提供服务,如果您使用的是Apache Linux机器,则最有可能来自/etc/mime.types。当我们运行
时,请使用\u javascript()
,内容类型显然是
text/javascript
@user198729
use\u javascript
是一种助手方法,它只将引用的JS文件包含到响应HTML中,它不做任何关于服务实际JS文件的事,这是在给出初始响应后浏览器发出的单独请求。如果您正在与呈现的
标记的
type=“text/javascript”
部分对话,则在呈现javascript文件时,这是一个硬编码值,不受请求格式配置的影响。
// In the view.yml
indexSuccess:
  stylesheets: [main, paper: { media: print }]

// In the Action
$this->getResponse()->addStylesheet('paper', '', array('media' => 'print'));

// In the template
<?php use_stylesheet('paper', '', array('media' => 'print')) ?>

// Resulting View
<link rel="stylesheet" type="text/css" media="print" href="/css/paper.css" />
public function getMimeType($format)
{
  return isset($this->formats[$format]) ? $this->formats[$format][0] : null;
}