2016-06-22 11 views
1

したがって、symfonyでxmlドキュメントを作成しようとしています。Symfony 2:xmlレスポンスのヘッダー表示を防止する

$response = new Response($this->render(
     'MyBundle:Sitemap:sitemap.xml.twig', 
     [ 
      'slugArray' => $slugArray, 
      'curDate' => $curDate 
     ] 
    )); 

    $response->headers->set('Content-Type', 'application/xml; charset=utf-8'); 

    return $response; 

$slugArrayが1000個のリンクの周りに含まれています、私はとテンプレートを呼び出すコントローラで

<?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
    {% for slug in slugArray %} 
    <url> 
     <loc>{{ slug }}</loc> 
     <lastmod>{{ curDate }}</lastmod> 
     <changefreq>monthly</changefreq> 
     <priority>0.5</priority> 
    </url> 
    {% endfor %} 
</urlset> 

:世代は問題なく動作し、私は次のようにsitemap.xml.twigという名前小枝テンプレートと文書を返しますこれらはすべて有効であり、$curDateにはdate('Y-m-d', time())の値が含まれています。

XML-Verarbeitungsfehler: nicht wohlgeformt 
Adresse: http://localhost:8888/myWebsite/sitemap.xml 
Zeile Nr. 1, Spalte 5: 

HTTP/1.0 200 OK 
----^ 

これは基本的にXMLドキュメントを意味しているが十分に形成されていない。しかし、

、私はサイトマップにアクセスするためにしようと、私は次のエラーを取得します。

xmlを解析するときに何らかの理由でヘッダーが考慮されるため、エラーが発生します。 xml自体は完全に有効です.Firefoxの開発ツールからの応答をコピーし、ヘッダーを残してオンラインバリデーターでチェックすると、エラーは表示されません。

$response->headers->set('Content-Type', 'application/xml; charset=utf-8');を削除すると、私は平易なHTMLを取得します。

どのように問題なくブラウザで解析できるxmlレスポンスを作成できますか?

+0

さまざまな文字セットを使用して、Chromeで直接レスポンスを読み込もうとしましたか?私はsymfonyでAPIエンドポイントを作成したときに同様の問題に遭遇したことを覚えていますが、当時はブラウザの問題のみでした。 –

+0

レスポンスで個別に設定しようとしましたか?例:$ response = new Response(); $ slugArray、 'curDate' => $ curDate])););};};}}};}}}; $ response-> setCharset( 'charset = utf-8'); $ response-> setStatusCode(Response :: HTTP_OK); $ response-> headers-> set( 'Content-Type'、 'application/xml'); $ response-> send(); ' – Rooneyl

+0

@Rooneyl私はしましたが、結果に全く影響しませんでした –

答えて

0

xmlコンテンツを生成するためにtwigを使用する場合、コントローラにはすでに応答があります。あなたのコントローラの :

$response = $this->render('....:sitemap.xml.twig', array('urls'=>$urls)); 
// at this stage $xml is an HttpFoudation Response Object; 
// simply set de content type 
$response->headers->set('Content-Type', 'xml'); 
$response->setCharset('utf-8'); 
return $response; 
関連する問題