laminas-feed icon indicating copy to clipboard operation
laminas-feed copied to clipboard

Methods of CoreExtensions expected in own writer extension

Open weierophinney opened this issue 5 years ago • 4 comments

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

weierophinney avatar Dec 31 '19 21:12 weierophinney

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

weierophinney avatar Dec 31 '19 21:12 weierophinney

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

weierophinney avatar Dec 31 '19 21:12 weierophinney

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

weierophinney avatar Dec 31 '19 21:12 weierophinney

@av3 Thanks for the feedback!


Originally posted by @froschdesign at https://github.com/zendframework/zend-feed/issues/87#issuecomment-469558277

weierophinney avatar Dec 31 '19 21:12 weierophinney