@nicolx のおかげで、何が起こっているのかを詳しく説明し、さらなるガイダンスを提供できます。
@nicolx$request->getContentType()
が指摘したように、接頭辞 HTTP_ のない HTTP ヘッダーを探しています ( の行 163 から 173 を参照sfWebRequest
)。ただし、sfBrowserBase は常にすべてのヘッダーに HTTP_ プレフィックスを追加します。したがって、この mod を追加します。
foreach($this->headers as $header => $value)
{
if(strotolower($header) == 'content-type' || strtolower($header) == 'content_type')
{
$_SERVER[strtoupper(str_replace('-','_',$header))] = $value;
} else {
$_SERVER['HTTP_'.strtoupper(str_replace('-','_',$header))] = $value;
}
}
これにより、ContentType
ヘッダーが設定され、アクションで検出可能になります。プレフィックスを含めないHTTP_
と、他のヘッダーは機能しません (たとえば$request->isXmlHtttpHeader()
、テスト ファイルでこれを設定しても失敗します)。
テスト メソッドisFormat()
は ContentType ヘッダーをテストしていませんが、Symfony ルート設定sf_formatをテストしています。ルートを具体的に設定したsf_format: json
場合
some_route:
url: /something/to/do
param: {module: top, action: index, sf_format: json}
それからテスト
with('request')->begin()->
isFormat('json')->
end()->
true を返します。
ヘッダーの設定をテストしたかったので、新しいテスター メソッドを sfTesterRequest に追加しましたisContentType()
。このメソッドのコードは次のとおりです。
public function isContentType($type)
{
$this->tester->is($this->request->getContentType(),$type, sprintf('request method is "%s"',strtoupper($type)));
return $this->getObjectToReturn();
}
このテストを呼び出すと、次のようになります。
with('request')->begin()->
isContentType('Application/Json')->
end()->