超薄框架 - >创建XML输出

时间:2012-03-02 14:19:44

标签: php xml twig slim

如何创建一个为RSS Stream输出真实XML内容的视图。我正在使用SLIM,TWIG与巴黎和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));
});

使用此Template layout.xml:

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

这个特殊的路线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格式发送

???

Thanx帮忙!

1 个答案:

答案 0 :(得分:5)

更新:这个答案在Slim版本3中不再适用。


您必须在Content-Type路由中覆盖text/xml响应的/rss/ HTTP标头:

$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内容类型。