3 * Zend Framework (http://framework.zend.com/)
5 * @link http://github.com/zendframework/zf2 for the canonical source repository
6 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7 * @license http://framework.zend.com/license/new-bsd New BSD License
10 namespace Zend\Feed\Writer;
12 use Zend\ServiceManager\AbstractPluginManager;
13 use Zend\ServiceManager\Exception\InvalidServiceException;
14 use Zend\ServiceManager\Factory\InvokableFactory;
17 * Plugin manager implementation for feed writer extensions
19 * Validation checks that we have an Entry, Feed, or Extension\AbstractRenderer.
21 class ExtensionPluginManager extends AbstractPluginManager implements ExtensionManagerInterface
24 * Aliases for default set of extension classes
28 protected $aliases = [
29 'atomrendererfeed' => Extension\Atom\Renderer\Feed::class,
30 'atomRendererFeed' => Extension\Atom\Renderer\Feed::class,
31 'AtomRendererFeed' => Extension\Atom\Renderer\Feed::class,
32 'AtomRenderer\Feed' => Extension\Atom\Renderer\Feed::class,
33 'contentrendererentry' => Extension\Content\Renderer\Entry::class,
34 'contentRendererEntry' => Extension\Content\Renderer\Entry::class,
35 'ContentRendererEntry' => Extension\Content\Renderer\Entry::class,
36 'ContentRenderer\Entry' => Extension\Content\Renderer\Entry::class,
37 'dublincorerendererentry' => Extension\DublinCore\Renderer\Entry::class,
38 'dublinCoreRendererEntry' => Extension\DublinCore\Renderer\Entry::class,
39 'DublinCoreRendererEntry' => Extension\DublinCore\Renderer\Entry::class,
40 'DublinCoreRenderer\Entry' => Extension\DublinCore\Renderer\Entry::class,
41 'dublincorerendererfeed' => Extension\DublinCore\Renderer\Feed::class,
42 'dublinCoreRendererFeed' => Extension\DublinCore\Renderer\Feed::class,
43 'DublinCoreRendererFeed' => Extension\DublinCore\Renderer\Feed::class,
44 'DublinCoreRenderer\Feed' => Extension\DublinCore\Renderer\Feed::class,
45 'itunesentry' => Extension\ITunes\Entry::class,
46 'itunesEntry' => Extension\ITunes\Entry::class,
47 'iTunesEntry' => Extension\ITunes\Entry::class,
48 'ItunesEntry' => Extension\ITunes\Entry::class,
49 'Itunes\Entry' => Extension\ITunes\Entry::class,
50 'itunesfeed' => Extension\ITunes\Feed::class,
51 'itunesFeed' => Extension\ITunes\Feed::class,
52 'iTunesFeed' => Extension\ITunes\Feed::class,
53 'ItunesFeed' => Extension\ITunes\Feed::class,
54 'Itunes\Feed' => Extension\ITunes\Feed::class,
55 'itunesrendererentry' => Extension\ITunes\Renderer\Entry::class,
56 'itunesRendererEntry' => Extension\ITunes\Renderer\Entry::class,
57 'iTunesRendererEntry' => Extension\ITunes\Renderer\Entry::class,
58 'ItunesRendererEntry' => Extension\ITunes\Renderer\Entry::class,
59 'ItunesRenderer\Entry' => Extension\ITunes\Renderer\Entry::class,
60 'itunesrendererfeed' => Extension\ITunes\Renderer\Feed::class,
61 'itunesRendererFeed' => Extension\ITunes\Renderer\Feed::class,
62 'iTunesRendererFeed' => Extension\ITunes\Renderer\Feed::class,
63 'ItunesRendererFeed' => Extension\ITunes\Renderer\Feed::class,
64 'ItunesRenderer\Feed' => Extension\ITunes\Renderer\Feed::class,
65 'slashrendererentry' => Extension\Slash\Renderer\Entry::class,
66 'slashRendererEntry' => Extension\Slash\Renderer\Entry::class,
67 'SlashRendererEntry' => Extension\Slash\Renderer\Entry::class,
68 'SlashRenderer\Entry' => Extension\Slash\Renderer\Entry::class,
69 'threadingrendererentry' => Extension\Threading\Renderer\Entry::class,
70 'threadingRendererEntry' => Extension\Threading\Renderer\Entry::class,
71 'ThreadingRendererEntry' => Extension\Threading\Renderer\Entry::class,
72 'ThreadingRenderer\Entry' => Extension\Threading\Renderer\Entry::class,
73 'wellformedwebrendererentry' => Extension\WellFormedWeb\Renderer\Entry::class,
74 'wellFormedWebRendererEntry' => Extension\WellFormedWeb\Renderer\Entry::class,
75 'WellFormedWebRendererEntry' => Extension\WellFormedWeb\Renderer\Entry::class,
76 'WellFormedWebRenderer\Entry' => Extension\WellFormedWeb\Renderer\Entry::class,
80 * Factories for default set of extension classes
84 protected $factories = [
85 Extension\Atom\Renderer\Feed::class => InvokableFactory::class,
86 Extension\Content\Renderer\Entry::class => InvokableFactory::class,
87 Extension\DublinCore\Renderer\Entry::class => InvokableFactory::class,
88 Extension\DublinCore\Renderer\Feed::class => InvokableFactory::class,
89 Extension\ITunes\Entry::class => InvokableFactory::class,
90 Extension\ITunes\Feed::class => InvokableFactory::class,
91 Extension\ITunes\Renderer\Entry::class => InvokableFactory::class,
92 Extension\ITunes\Renderer\Feed::class => InvokableFactory::class,
93 Extension\Slash\Renderer\Entry::class => InvokableFactory::class,
94 Extension\Threading\Renderer\Entry::class => InvokableFactory::class,
95 Extension\WellFormedWeb\Renderer\Entry::class => InvokableFactory::class,
96 // Legacy (v2) due to alias resolution; canonical form of resolved
97 // alias is used to look up the factory, while the non-normalized
98 // resolved alias is used as the requested name passed to the factory.
99 'zendfeedwriterextensionatomrendererfeed' => InvokableFactory::class,
100 'zendfeedwriterextensioncontentrendererentry' => InvokableFactory::class,
101 'zendfeedwriterextensiondublincorerendererentry' => InvokableFactory::class,
102 'zendfeedwriterextensiondublincorerendererfeed' => InvokableFactory::class,
103 'zendfeedwriterextensionitunesentry' => InvokableFactory::class,
104 'zendfeedwriterextensionitunesfeed' => InvokableFactory::class,
105 'zendfeedwriterextensionitunesrendererentry' => InvokableFactory::class,
106 'zendfeedwriterextensionitunesrendererfeed' => InvokableFactory::class,
107 'zendfeedwriterextensionslashrendererentry' => InvokableFactory::class,
108 'zendfeedwriterextensionthreadingrendererentry' => InvokableFactory::class,
109 'zendfeedwriterextensionwellformedwebrendererentry' => InvokableFactory::class,
113 * Do not share instances (v2)
117 protected $shareByDefault = false;
120 * Do not share instances (v3)
124 protected $sharedByDefault = false;
127 * Validate the plugin (v3)
129 * Checks that the extension loaded is of a valid type.
131 * @param mixed $plugin
133 * @throws InvalidServiceException if invalid
135 public function validate($plugin)
137 if ($plugin instanceof Extension\AbstractRenderer) {
142 if ('Feed' == substr(get_class($plugin), -4)) {
147 if ('Entry' == substr(get_class($plugin), -5)) {
152 throw new InvalidServiceException(sprintf(
153 'Plugin of type %s is invalid; must implement %s\Extension\RendererInterface '
154 . 'or the classname must end in "Feed" or "Entry"',
155 (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
161 * Validate plugin (v2)
163 * @param mixed $plugin
165 * @throws Exception\InvalidArgumentException when invalid
167 public function validatePlugin($plugin)
170 $this->validate($plugin);
171 } catch (InvalidServiceException $e) {
172 throw new Exception\InvalidArgumentException(sprintf(
173 'Plugin of type %s is invalid; must implement %s\Extension\RendererInterface '
174 . 'or the classname must end in "Feed" or "Entry"',
175 (is_object($plugin) ? get_class($plugin) : gettype($plugin)),