首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZF2如何禁用Zend\Feed\Writer\Feed扩展

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

Stack Overflow用户
提问于 2014-04-11 06:56:55
回答 1查看 525关注 0票数 1

尝试使用zend \ feed \Writer\Feed在Zend framework2中创建一个简单的rss提要:

代码语言:javascript
复制
$feed = new \Zend\Feed\Writer\Feed();

...

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

这将产生:

代码语言:javascript
复制
<?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>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-11 08:03:09

在带有扩展的Zend\Feed组件中,这是非常混乱的。我已经玩了很久了。

发生了什么?

构造一个Zend\Feed\Writer\FeedFeed扩展了Zend\Feed\Writer\AbstractFeed。在__construct() of AbstractFeed中发生了这样的情况:

代码语言:javascript
复制
public function __construct()
{
    Writer::registerCoreExtensions();
    $this->_loadExtensions();
}

Writer在这里,Zend\Feed\Writer\WriterregisterCoreExtensions看起来如下:

代码语言:javascript
复制
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变量名重写到自己的render类。

对于Renderer类,您可以创建一个getter/setter来删除您想要的扩展。这样,您就可以调优所需的扩展。它没有那么漂亮,但希望它在ZF3中得到了改进:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23005571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档