laminas-feed
laminas-feed copied to clipboard
Methods of CoreExtensions expected in own writer extension
Thank you for your writer example, froschdesign. I tested it and am getting an error message. This time I created a separate issue, because it's not related to the documentation ;)
I created an Entry class (extends Extension\AbstractRenderer
) and registered it in my handler. But the output of my atom feed fails (using the export method). I get the error message:
call_user_func_array() expects parameter 1 to be a valid callback, class 'Webfeed\Writer\Renderer\Entry' does not have a method 'getItunesAuthors'
I can see that $authors = $this->getDataContainer()->getItunesAuthors();
of Writer/Extension/ITunes/Renderer/Entry.php
is executed, before it fails. Why should my own Renderer need getItunesAuthors?
I assume on reason is that registerCoreExtensions()
is called in the AbstractFeed constructor. Unfortunately I can't see a method to unregister the extension. When removing iTunes in the registerCoreExtensions method, the method getPlayPodcastBlock
is expected. It would work if I remove everything except Atom.
Is this an unexpected behavior or am I doing something wrong?
Originally posted by @av3 at https://github.com/zendframework/zend-feed/issues/87
I assume on reason is that
registerCoreExtensions()
is called in the AbstractFeed constructor.
I think that's the same problem as deregistering an extension.
Originally posted by @froschdesign at https://github.com/zendframework/zend-feed/issues/87#issuecomment-427255982
Please look at #90 and my idea for an improvement. I think this should help also for you problem – remove core extension and add a custom extension.
Originally posted by @froschdesign at https://github.com/zendframework/zend-feed/issues/87#issuecomment-469420000
Thank's for the info. Fortunately I kept an old branch with my attempts. I modified the code:
/** @var \Zend\Feed\Writer\StandaloneExtensionManager $em */
$em = \Zend\Feed\Writer\Writer::getExtensionManager();
$em->remove('ITunes\Renderer\Feed');
$em->remove('GooglePlayPodcast\Renderer\Feed');
$em->add(
'Webfeed\Renderer\Feed',
\Webfeed\Writer\Renderer\Feed::class
);
Writer::setExtensionManager($em);
Writer::registerExtension('Webfeed');
With the removal of ITunes\Renderer\Feed
the error class 'Webfeed\Writer\Feed' does not have a method 'getItunesAuthors'
was fixed and with the removal of GooglePlayPodcast\Renderer\Feed
the error class 'Webfeed\Writer\Feed' does not have a method 'getPlayPodcastAuthors'
disappeared. I didn't make any changed to the registerCoreExtensions method, you mentioned, so I could use it with zend-feed 2.11
Originally posted by @av3 at https://github.com/zendframework/zend-feed/issues/87#issuecomment-469490144
@av3 Thanks for the feedback!
Originally posted by @froschdesign at https://github.com/zendframework/zend-feed/issues/87#issuecomment-469558277