避免在父模板的控制器中重复相同的查询

时间:2015-08-27 08:50:07

标签: php symfony templates twig

我正在尝试创建一个消息传递系统,而我正面临一个小问题。我有一个更大的模板,显示我的菜单和我的内容。菜单包括新消息的数量,内容可以是任何页面(撰写新消息,收件箱,发送)。

问题是我必须通过将新接收的消息数传递给每个小模板来呈现每个小模板,每次调用该学说并重复代码。有没有办法只将号码发送到父模板?

以下是我的模板:

这是包含newmsg变量的父级,它给我带来了问题。

{% extends "::base.html.twig" %}

{% block body %}

    <a href="{{ path('private_message_inbox') }}">  inbox</a>  : {{ newmsg }}
    <a href="{{ path('private_message_sent') }}">sent</a>
    <a href="{{ path('private_message_new') }}">compose</a>

{% endblock body %}

以下是子模板的示例:

{% block body %}
    {{ parent() }}

    {% if messageList %}
        {% for message in messageList %}
            <li><a href="{{ path('private_message_view',{'msg': message.id}) }}">title</a> = {{ message.title|e }}</li>
            <li>cont= {{ message.content|e }}</li>
            <li>data= {{ message.date|date('d-m-Y H:m:s') }}</li>
            <li>sender= {{ message.sender|e }}</li>
            <hr>
        {% endfor %}
    {% else %}
        <div>no messages</div>
    {% endif %}
{% endblock body %}

问题是每个子模板都在向我询问newmsg变量

$messages = $this->getDoctrine()->getRepository('MedAppCrudBundle:Message');
    $newMessagesNo = count($messages->findBy(array('seen' => '0', 'receiver' => $this->getUser())));
    return $this->render(
        'MedAppCrudBundle:UserBackend\Message:new.html.twig',
        array(
            'form' => $form->createView(),
            'newmsg' => $newMessagesNo,
        )
    );

我必须在每个控制器中写这个。我可以用任何方式缩短这个问题吗?

0 个答案:

没有答案