尝试使用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>
?
答案 0 :(得分:1)
带有扩展程序的Zend\Feed
组件非常混乱。我一直在搞乱它。
会发生什么?
您构建Zend\Feed\Writer\Feed
。 Feed
扩展了Zend\Feed\Writer\AbstractFeed
。 __construct()
AbstractFeed
发生了这个:
public function __construct()
{
Writer::registerCoreExtensions();
$this->_loadExtensions();
}
Writer
在Zend\Feed\Writer\Writer
。 registerCoreExtensions
如下所示:
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
注册的所有扩展程序,并将其导入Feed
。 AbstractRenderer
中的方式也是如此。
如何解决?
由于Feed和呈现器内部调用registerCoreExtensions()
,因此您无法覆盖默认的扩展列表。此外,Feed和Renderer没有扩展名的getter / setter。我想出的唯一方法是编写自己的Feed对象和Renderer对象。
对于 Feed 对象,您可以创建一个getter / setter来删除所需的扩展名。您还可以覆盖复制方法内容的export
,但会将$renderClass
变量名称覆盖到您自己的渲染类中。
对于 Renderer 类,您可以创建一个getter / setter来删除所需的扩展名。这样,您可以调整所需的扩展名。它并不那么漂亮,但希望它在ZF3中有所改进:)