2021-05-29 12:52:03 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Core\Twig\Extension;
|
|
|
|
|
|
|
|
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
|
|
|
use Twig\Extension\AbstractExtension;
|
|
|
|
use Twig\TwigFilter;
|
|
|
|
|
|
|
|
class BlockExtension extends AbstractExtension
|
|
|
|
{
|
|
|
|
protected UrlGeneratorInterface $urlGenerator;
|
|
|
|
|
|
|
|
public function __construct(UrlGeneratorInterface $urlGenerator)
|
|
|
|
{
|
|
|
|
$this->urlGenerator = $urlGenerator;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* {@inheritdoc}
|
|
|
|
*/
|
|
|
|
public function getFilters()
|
|
|
|
{
|
|
|
|
return [
|
|
|
|
new TwigFilter('murph_url', [$this, 'replaceUrl']),
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
public function replaceUrl($content)
|
|
|
|
{
|
|
|
|
preg_match_all('#\{\{\s*url://(?P<route>[a-z_]+)(\?(?P<params>.*))?\s*\}\}#isU', $content, $match, PREG_SET_ORDER);
|
|
|
|
|
|
|
|
foreach ($match as $block) {
|
|
|
|
$url = null;
|
|
|
|
|
|
|
|
try {
|
2021-05-29 13:01:20 +02:00
|
|
|
$block['params'] = $block['params'] ?? '';
|
2021-05-29 12:52:03 +02:00
|
|
|
$block['params'] = str_replace(['&', ' '], ['&', '%20'], $block['params']);
|
|
|
|
$route = $block['route'];
|
|
|
|
parse_str($block['params'], $params);
|
|
|
|
|
|
|
|
$url = $this->urlGenerator->generate($route, $params, UrlGeneratorInterface::ABSOLUTE_URL);
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
}
|
|
|
|
|
2021-05-29 13:09:50 +02:00
|
|
|
$content = str_replace($block[0], $url, $content);
|
2021-05-29 12:52:03 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return $content;
|
|
|
|
}
|
|
|
|
}
|