Rev 16766 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php
declare(strict_types=1);
namespace LeadersLinked\View;;
use Laminas\EventManager\EventManagerInterface;
use Laminas\View\ViewEvent;
use Laminas\EventManager\ListenerAggregateInterface;
use Laminas\Mvc\I18n\Translator;
/**
* @category Laminas
* @package Laminas_Mvc
* @subpackage View
*/
class RenderingStrategy implements ListenerAggregateInterface
{
/**
*
* @var Translator
*/
private $translator;
/**
*
* @param Translator $translator
*/
public function __construct($translator)
{
$this->translator = $translator;
}
public function attach(EventManagerInterface $events, $priority = null)
{
$priority = -999;
$this->listeners[] = $events->attach(ViewEvent::EVENT_RESPONSE, [$this, 'render'], $priority);
}
public function detach(EventManagerInterface $events)
{
foreach ($this->listeners as $index => $listener) {
if ($events->detach($listener)) {
unset($this->listeners[$index]);
}
}
}
public function render(ViewEvent $e)
{
$renderer = $e->getRenderer();
$response = $e->getResponse();
$result = $e->getResult();
/*
$matches = [];
preg_match_all( '/LABEL_\w+/', $result, $matches);
print_r($matches); exit;
*/
$result = preg_replace_callback(
'/LABEL_\w+/',
function ( $matches ) {
return $this->translator->translate($matches[0]);
},
$result
);
$result = preg_replace_callback(
'/ERROR_\w+/',
function ( $matches ) {
return $this->translator->translate($matches[0]);
},
$result
);
$response->setContent($result);
return $response;
}
}