Spaces:
No application file
No application file
namespace Mautic\CoreBundle\Menu; | |
use Knp\Menu\ItemInterface; | |
use Knp\Menu\Matcher\MatcherInterface; | |
use Knp\Menu\Renderer\RendererInterface; | |
use Twig\Environment; | |
class MenuRenderer implements RendererInterface | |
{ | |
private array $defaultOptions; | |
public function __construct( | |
private MatcherInterface $matcher, | |
private Environment $twig, | |
array $defaultOptions = [] | |
) { | |
$this->defaultOptions = array_merge( | |
[ | |
'depth' => null, | |
'matchingDepth' => null, | |
'currentAsLink' => true, | |
'currentClass' => 'active', | |
'ancestorClass' => 'open', | |
'firstClass' => 'first', | |
'lastClass' => 'last', | |
'itemAttributes' => [], | |
'template' => '@MauticCore/Menu/main.html.twig', | |
'compressed' => false, | |
'allow_safe_labels' => false, | |
'clear_matcher' => true, | |
], | |
$defaultOptions | |
); | |
} | |
/** | |
* Renders menu. | |
*/ | |
public function render(ItemInterface $item, array $options = []): string | |
{ | |
$options = array_merge($this->defaultOptions, $options); | |
if ($options['clear_matcher']) { | |
$this->matcher->clear(); | |
} | |
// render html | |
$html = $this->twig->render($options['template'], [ | |
'item' => $item, | |
'options' => $options, | |
'matcher' => $this->matcher, | |
]); | |
return $html; | |
} | |
} | |