protected function createRenderer(ContainerInterface $container)
{
// Try to return the configured renderer. If it points to an undefined service, create a renderer on the fly
$serviceName = $this->mailOptions->getRenderer();
try {
$renderer = $container->get($serviceName);
return $renderer;
} catch (ServiceNotFoundException $e) {
// In case the renderer service is not defined, try to construct it
$vmConfig = $this->getSpecificConfig($container, 'view_manager');
$renderer = new PhpRenderer();
// Check what kind of view_manager configuration has been defined
if (isset($vmConfig['template_map']) && isset($vmConfig['template_path_stack'])) {
// If both a template_map and a template_path_stack have been defined, create an AggregateResolver
$pathStackResolver = new TemplatePathStack();
$pathStackResolver->setPaths($vmConfig['template_path_stack']);
$resolver = new AggregateResolver();
$resolver->attach($pathStackResolver)->attach(new TemplateMapResolver($vmConfig['template_map']));
$renderer->setResolver($resolver);
} elseif (isset($vmConfig['template_map'])) {
// Create a TemplateMapResolver in case only the template_map has been defined
$renderer->setResolver(new TemplateMapResolver($vmConfig['template_map']));
} elseif (isset($vmConfig['template_path_stack'])) {
// Create a TemplatePathStack resolver in case only the template_path_stack has been defined
$pathStackResolver = new TemplatePathStack();
$pathStackResolver->setPaths($vmConfig['template_path_stack']);
$renderer->setResolver($pathStackResolver);
}
// Create a HelperPluginManager with default view helpers and user defined view helpers
$renderer->setHelperPluginManager($this->createHelperPluginManager($container));
return $renderer;
}
}