*/ protected $contentPlaceholders = ['article', 'content']; /** @var PhpRenderer */ protected $renderer; public function __construct(PhpRenderer $renderer) { $this->renderer = $renderer; } /** * Retrieve the composed renderer * * @return PhpRenderer */ public function getRenderer() { return $this->renderer; } /** * Set list of possible content placeholders * * @param array $contentPlaceholders * @return PhpRendererStrategy */ public function setContentPlaceholders(array $contentPlaceholders) { $this->contentPlaceholders = $contentPlaceholders; return $this; } /** * Get list of possible content placeholders * * @return array */ public function getContentPlaceholders() { return $this->contentPlaceholders; } /** * {@inheritDoc} */ public function attach(EventManagerInterface $events, $priority = 1) { $this->listeners[] = $events->attach(ViewEvent::EVENT_RENDERER, [$this, 'selectRenderer'], $priority); $this->listeners[] = $events->attach(ViewEvent::EVENT_RESPONSE, [$this, 'injectResponse'], $priority); } /** * Select the PhpRenderer; typically, this will be registered last or at * low priority. * * @return PhpRenderer */ public function selectRenderer(ViewEvent $e) { return $this->renderer; } /** * Populate the response object from the View * * Populates the content of the response object from the view rendering * results. * * @return void */ public function injectResponse(ViewEvent $e) { $renderer = $e->getRenderer(); $response = $e->getResponse(); if ($renderer !== $this->renderer || $response === null) { return; } $result = $e->getResult(); // Set content // If content is empty, check common placeholders to determine if they are // populated, and set the content from them. if (empty($result)) { $placeholders = $renderer->plugin('placeholder'); foreach ($this->contentPlaceholders as $placeholder) { if ($placeholders->containerExists($placeholder)) { $result = (string) $placeholders->getContainer($placeholder); break; } } } $response->setContent($result); } }