Reputation: 322
I use service for Menu render and other menu features. But when I render menu, instead html menu I receive menu like string. Why it happens?
I have service.
services:
ad_backend.menu:
class: AdBackendBundle\Services\MenuService
arguments: [@doctrine.orm.entity_manager, @twig]
namespace AdBackendBundle\Services;
use Doctrine\ORM\EntityManager;
class MenuService
{
private $em;
private $twig;
public function __construct(EntityManager $em, \Twig_Environment $twig)
{
$this->em = $em;
$this->twig = $twig;
}
public function getMenuList()
{
return $this->em->getRepository('AdBackendBundle:AdMenu')->findAll();
}
public function renderMenuById($id)
{
$links = $this->em->getRepository('AdBackendBundle:AdMenu')->getLinksByMenuId($id);
return $this->twig->render('AdBackendBundle:Menu:menu-template.html.twig', array(
'links' => $links
));
}
public function renderMenuByName($name)
{
$links = $this->em->getRepository('AdBackendBundle:AdMenu')->getLinksByMenuName($name);
return $this->twig->render('AdBackendBundle:Menu:menu-template.html.twig', array(
'links' => $links
));
}
}
menu-template.html.twig
<div id="menu-">
{{ _self.renderMenu(links) }}
</div>
{% macro renderMenu(links) %}
{% if links|length %}
<ul>
{% for link in links %}
<li>
{% if link.route %}
<a href="{#{{ path(link.route) }}#}">{{ link.title }}</a>
{% elseif link.url %}
<a href="{{ link.url }}">{{ link.title }}</a>
{% endif %}
{% if link.children|length %}
{{ _self.renderMenu(link.children) }}
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
{% endmacro %}
Basic page template for Backend:
{% extends "::base.html.twig" %}
{% block sidebar_left %}
{{ menu.renderMenuByName('backend') }}
{% endblock %}
Upvotes: 2
Views: 78
Reputation: 4002
All strings are html escasped by default, you need to use raw
to prevent that:
{{ menu.renderMenuByName('backend')|raw }}
Upvotes: 3