Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2细枝渲染函数中的内部路由_Php_Symfony_Doctrine Orm_Routing_Twig - Fatal编程技术网

Php Symfony2细枝渲染函数中的内部路由

Php Symfony2细枝渲染函数中的内部路由,php,symfony,doctrine-orm,routing,twig,Php,Symfony,Doctrine Orm,Routing,Twig,我的layout.html.twig: {{ render(controller('AcmeDemoBundle:Page:mainmenu')) }} 页面控制器从条令中检索所有页面,并用一组页面呈现main menu.html.twig Mymain menu.html.twig: {% if menu_pages is defined %} {% for page in menu_pages %} <li class="{% if app.request.a

我的
layout.html.twig

{{ render(controller('AcmeDemoBundle:Page:mainmenu')) }}
页面
控制器从条令中检索所有页面,并用一组页面呈现
main menu.html.twig

My
main menu.html.twig

{% if menu_pages is defined %}
    {% for page in menu_pages %}
        <li class="{% if app.request.attributes.get('_internal') == '_page_show' and app.request.get('id') == page.id %}active{% endif %}"><a href="{{ path('_page_show', {id: page.id}) }}">{{ page.title|e }}</a></li>
    {% endfor %}
{% endif %}
{%如果定义了菜单页面%}
{%用于菜单中的页面\页面%}
  • {%endfor%} {%endif%}

    但不显示
    活动
    类。据我所知,问题在于内部路由。如何修复此问题?

    最好不要使用
    {{render(controller('AcmeDemoBundle:Page:main menu'))}
    。当你改用它时,它工作得更快更舒适。您可以创建一个服务,该服务将在包含它们的任何页面上显示菜单。在服务中,您可以轻松访问添加
    活动
    类的当前
    \u路线

    但是如果您确实需要使用
    {render(controller('AcmeDemoBundle:Page:main menu'))}
    ,那么您需要向他们传递一个当前请求,如:

    {{ render(controller('AcmeDemoBundle:Page:mainmenu', {'request': app.request})) }}
    
    然后将请求传递给twig:

    public function mainmenuAction($request) {
    
        return $this->render('AcmeDemoBundle:Page:mainmenu.html.twig', array('request' => $request));
    }
    
    在twig中使用此请求:

    {% if menu_pages is defined %}
        {% for page in menu_pages %}
            <li class="{% if request.get('_route') == '_page_show' and request.get('id') == page.id %}active{% endif %}"><a href="{{ path('_page_show', {id: page.id}) }}">{{ page.title|e }}</a></li>
        {% endfor %}
    {% endif %}
    
    {%如果定义了菜单页面%}
    {%用于菜单中的页面\页面%}
    
  • {%endfor%} {%endif%}
    app.request.attributes.get(“\u route”)不起作用。因为它显示主页的当前路由,而不是由
    呈现(控制器(..)
    细枝发出的内部路由method@Victor,为什么您认为
    {{render(controller())}}
    很慢?那么
    {{render_hinclude(controller())}}
    -你有使用hinclude的经验吗?我注意到,它比渲染(controller())慢,但Symfony仍然推荐它。最后但并非最不重要的一点是,您希望如何使用服务来代替?你是说控制器即服务吗?@Victor,你的意思可能是
    return$this->render
    而不是
    $this->render
    ?这应该是一个响应。
    render\u hinclude
    我不使用,但有
    render(controller())
    的经验,在我重新组织此服务之前,它的工作速度稍慢一些。我创建了一个
    twig简单函数
    ,它按名称返回任何服务。而且我可以通过名字直接在twig中访问任何服务。为什么?:)如果我需要将不同操作的多个模板传递给服务,我可以将其传递给每个操作,或者从细枝模板调用它们。@Victor-如果将请求作为方法参数添加到控制器中,则请求将自动注入magic变量
    $\u request
    。无需从模板传递
    app.request
    !进一步的控制器作为服务通常不会更快。。。您仍然可以使用以下语法呈现作为服务的控制器:
    {{render(controller('controller\u service:mainmenu'))}
    。请注意,使用symfony等反向代理或外部代理(即varnish)时,您的答案将不起作用。