4

如何创建为 RSS 流输出真实 XML 内容的视图。我正在使用 SLIM、TWIG 与 Paris 和 Idiorm 结合使用模板。

就像是 :

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

使用此模板 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 Doument,其中包含作为正文文本的模板...标题始终作为 xHTML 而不是 XML 发送

???

感谢您的帮助!

4

1 回答 1

5

更新:此答案不再适用于 Slim 3。


您必须在路由中覆盖Content-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内容类型。

于 2012-09-24T14:02:03.613 回答