ZF2如何禁用Zend \ Feed \ Writer \ Feed扩展

时间:2014-04-11 06:56:56

标签: rss zend-framework2 feed

尝试使用Zend \ Feed \ Writer \ Feed在zend framework2中创建一个简单的RSS源:

$feed = new \Zend\Feed\Writer\Feed();

...

$out = $feed->export('rss');
echo $out;

这将输出:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>example</title>
    <description>example</description>
    <generator>Zend_Feed_Writer 2 (http://framework.zend.com)</generator>
    <link>http://www.google.com</link>
    <item>
      <title>article1</title>
      <pubDate>Fri, 11 Apr 2014 06:32:53 +0000</pubDate>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>article2</title>
      <pubDate>Fri, 11 Apr 2014 06:32:53 +0000</pubDate>
      <slash:comments>0</slash:comments>
    </item>
  </channel>
</rss>

我的问题是:

如何禁用xmlns:斜杠扩展名<slash:comments>0</slash:comments>

1 个答案:

答案 0 :(得分:1)

带有扩展程序的Zend\Feed组件非常混乱。我一直在搞乱它。

会发生什么?

您构建Zend\Feed\Writer\FeedFeed扩展了Zend\Feed\Writer\AbstractFeed__construct() AbstractFeed发生了这个:

public function __construct()
{
    Writer::registerCoreExtensions();
    $this->_loadExtensions();
}

WriterZend\Feed\Writer\WriterregisterCoreExtensions如下所示:

public static function registerCoreExtensions()
{
    static::registerExtension('DublinCore');
    static::registerExtension('Content');
    static::registerExtension('Atom');
    static::registerExtension('Slash');
    static::registerExtension('WellFormedWeb');
    static::registerExtension('Threading');
    static::registerExtension('ITunes');
}

在这里,您可以看到不同的扩展名已添加到静态Writer实例中。从那时起,_loadExtensions()调用会提取从Writer注册的所有扩展程序,并将其导入FeedAbstractRenderer中的方式也是如此。

如何解决?

由于Feed和呈现器内部调用registerCoreExtensions(),因此您无法覆盖默认的扩展列表。此外,Feed和Renderer没有扩展名的getter / setter。我想出的唯一方法是编写自己的Feed对象和Renderer对象。

对于 Feed 对象,您可以创建一个getter / setter来删除所需的扩展名。您还可以覆盖复制方法内容的export,但会将$renderClass变量名称覆盖到您自己的渲染类中。

对于 Renderer 类,您可以创建一个getter / setter来删除所需的扩展名。这样,您可以调整所需的扩展名。它并不那么漂亮,但希望它在ZF3中有所改进:)