- <?php
- /**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- */
-
- namespace Zend\View;
-
- use Zend\I18n\Translator\TranslatorAwareInterface;
- use Zend\ServiceManager\AbstractPluginManager;
- use Zend\ServiceManager\ConfigInterface;
-
- /**
- * Plugin manager implementation for view helpers
- *
- * Enforces that helpers retrieved are instances of
- * Helper\HelperInterface. Additionally, it registers a number of default
- * helpers.
- */
- class HelperPluginManager extends AbstractPluginManager
- {
- /**
- * Default set of helpers factories
- *
- * @var array
- */
- protected $factories = array(
- 'flashmessenger' => 'Zend\View\Helper\Service\FlashMessengerFactory',
- 'identity' => 'Zend\View\Helper\Service\IdentityFactory',
- );
-
- /**
- * Default set of helpers
- *
- * @var array
- */
- protected $invokableClasses = array(
- // basepath, doctype, and url are set up as factories in the ViewHelperManagerFactory.
- // basepath and url are not very useful without their factories, however the doctype
- // helper works fine as an invokable. The factory for doctype simply checks for the
- // config value from the merged config.
- 'basepath' => 'Zend\View\Helper\BasePath',
- 'cycle' => 'Zend\View\Helper\Cycle',
- 'declarevars' => 'Zend\View\Helper\DeclareVars',
- 'doctype' => 'Zend\View\Helper\Doctype', // overridden by a factory in ViewHelperManagerFactory
- 'escapehtml' => 'Zend\View\Helper\EscapeHtml',
- 'escapehtmlattr' => 'Zend\View\Helper\EscapeHtmlAttr',
- 'escapejs' => 'Zend\View\Helper\EscapeJs',
- 'escapecss' => 'Zend\View\Helper\EscapeCss',
- 'escapeurl' => 'Zend\View\Helper\EscapeUrl',
- 'gravatar' => 'Zend\View\Helper\Gravatar',
- 'headlink' => 'Zend\View\Helper\HeadLink',
- 'headmeta' => 'Zend\View\Helper\HeadMeta',
- 'headscript' => 'Zend\View\Helper\HeadScript',
- 'headstyle' => 'Zend\View\Helper\HeadStyle',
- 'headtitle' => 'Zend\View\Helper\HeadTitle',
- 'htmlflash' => 'Zend\View\Helper\HtmlFlash',
- 'htmllist' => 'Zend\View\Helper\HtmlList',
- 'htmlobject' => 'Zend\View\Helper\HtmlObject',
- 'htmlpage' => 'Zend\View\Helper\HtmlPage',
- 'htmlquicktime' => 'Zend\View\Helper\HtmlQuicktime',
- 'inlinescript' => 'Zend\View\Helper\InlineScript',
- 'json' => 'Zend\View\Helper\Json',
- 'layout' => 'Zend\View\Helper\Layout',
- 'paginationcontrol' => 'Zend\View\Helper\PaginationControl',
- 'partialloop' => 'Zend\View\Helper\PartialLoop',
- 'partial' => 'Zend\View\Helper\Partial',
- 'placeholder' => 'Zend\View\Helper\Placeholder',
- 'renderchildmodel' => 'Zend\View\Helper\RenderChildModel',
- 'rendertoplaceholder' => 'Zend\View\Helper\RenderToPlaceholder',
- 'serverurl' => 'Zend\View\Helper\ServerUrl',
- 'url' => 'Zend\View\Helper\Url',
- 'viewmodel' => 'Zend\View\Helper\ViewModel',
- );
-
- /**
- * @var Renderer\RendererInterface
- */
- protected $renderer;
-
- /**
- * Constructor
- *
- * After invoking parent constructor, add an initializer to inject the
- * attached renderer and translator, if any, to the currently requested helper.
- *
- * @param null|ConfigInterface $configuration
- */
- public function __construct(ConfigInterface $configuration = null)
- {
- parent::__construct($configuration);
-
- $this->addInitializer(array($this, 'injectRenderer'))
- ->addInitializer(array($this, 'injectTranslator'));
- }
-
- /**
- * Set renderer
- *
- * @param Renderer\RendererInterface $renderer
- * @return HelperPluginManager
- */
- public function setRenderer(Renderer\RendererInterface $renderer)
- {
- $this->renderer = $renderer;
-
- return $this;
- }
-
- /**
- * Retrieve renderer instance
- *
- * @return null|Renderer\RendererInterface
- */
- public function getRenderer()
- {
- return $this->renderer;
- }
-
- /**
- * Inject a helper instance with the registered renderer
- *
- * @param Helper\HelperInterface $helper
- * @return void
- */
- public function injectRenderer($helper)
- {
- $renderer = $this->getRenderer();
- if (null === $renderer) {
- return;
- }
- $helper->setView($renderer);
- }
-
- /**
- * Inject a helper instance with the registered translator
- *
- * @param Helper\HelperInterface $helper
- * @return void
- */
- public function injectTranslator($helper)
- {
- if ($helper instanceof TranslatorAwareInterface) {
- $locator = $this->getServiceLocator();
- if ($locator && $locator->has('MvcTranslator')) {
- $helper->setTranslator($locator->get('MvcTranslator'));
- } elseif ($locator && $locator->has('translator')) {
- $helper->setTranslator($locator->get('translator'));
- }
- }
- }
-
- /**
- * Validate the plugin
- *
- * Checks that the helper loaded is an instance of Helper\HelperInterface.
- *
- * @param mixed $plugin
- * @return void
- * @throws Exception\InvalidHelperException if invalid
- */
- public function validatePlugin($plugin)
- {
- if ($plugin instanceof Helper\HelperInterface) {
- // we're okay
- return;
- }
-
- throw new Exception\InvalidHelperException(sprintf(
- 'Plugin of type %s is invalid; must implement %s\Helper\HelperInterface',
- (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
- __NAMESPACE__
- ));
- }
- }