4

RSS ストリームの実際の XML コンテンツを出力するビューを作成するにはどうすればよいですか。パリとイディオムと組み合わせて、テンプレート作成にSLIM、TWIGを使用しています。

何かのようなもの :

$app -> get('/rss/', function() use ($app) {
$articles = Model::factory('Article') -> order_by_desc('timestamp') -> find_many();
return $app -> render('rss.xml', array('articles' => $articles));
});

この Template layout.xml を使用すると、次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
{% block content %} {% endblock %}

そして、Route RSS 用のこの特別なテンプレート:

{% extends 'layout.xml' %}
{% block content %}     
<blog_content>
{% for article in articles %}
<article>
<article_id>{{ article.id }}</article_id>
<article_headline>{{ article.title }}</article_headline>
<article_author>{{ article.author }}</article_author>
<article_timestamp>{{ article.timestamp }}</article_timestamp>
<article_summary>{{ article.summary }}</article_summary>
<article_link>http://slim.phaziz.com/article/{{ article.id }}/</article_link>
</article>
{% endfor %}
</blog_content>
{% endblock %}

本文テキストとしてテンプレートを含む HTML ドキュメントとして表示されます... ヘッダーは常に XML ではなく xHTML として送信されます

???

助けてくれてありがとう!

4

1 に答える 1

5

更新:この回答は Slim 3 には適用されなくなりました。


routeContent-Typeの応答の HTTP ヘッダーを上書きする必要があり text/xmlます。/rss/

$app -> get('/rss/', function() use ($app) {
  $articles = Model::factory('Article') -> order_by_desc('timestamp') -> find_many();
  
  $app->response->headers->set('Content-Type', 'text/xml')
  
  return $app -> render('rss.xml', array('articles' => $articles));
});

http://docs.slimframework.com/response/headers/

編集 : 生成された XML が 100% RSS の場合は、application/rss+xml代わりに content-type を使用してください。

于 2012-09-24T14:02:03.613 に答える