共享相同的变量多个模板TWIG/SYMFONY


Share same variable multiple templates TWIG/SYMFONY

我想分享一些变量到不同的小枝模板:

这是我的控制器:

public function indexAction()
{
    $em = $this->getDoctrine()->getManager();
    //Get All projects
    $projects = $em->getRepository('WebAwardsBundle:Project')->findAll();
    //Get the Winner of the day
    $winner = $em->getRepository('WebAwardsBundle:Winner')->findBy(
        array('isDay' => '1')
    );
    foreach($winner as $win){
        $idProject = $win->getIdProject();
    }
    $winner = $em->getRepository('WebAwardsBundle:Project')->findById($idProject);
    //Get the author of the project
    $idUser = $winner[0]->getIdAuthor();
    $user = $em->getRepository('WebAwardsBundle:User')->findById($idUser);
    //Get the vote of the project
    $vote = $em->getRepository('WebAwardsBundle:Vote')->findByIdProject($idProject);

    //Get the last project of the Month
    //All Winner of the month
    //Recuperer dans la liste de tous les projets, le projet == meme id, order by date desc limit 1
    return $this->render('project/index.html.twig', array(
        'projects' => $projects,
        'winner'   => $winner,
        'user'     => $user,
        'vote'     => $vote,
    ));
}

在base.html.twig:

中有一个"winner"对象
<footer class="footer">
    <div class="container-fluid">
        <div class="col-xs-12 col-md-4">
            <div class="col-xs-12">- SITE DU MOIS-</div>
            <div class="col-xs-12">{{ winner[0].name }}</div>
            <div class="col-xs-12">- SITE DU MOIS-</div>
        </div>
        <div class="col-xs-12 col-md-4">qsd</div>
        <div class="col-xs-12 col-md-4">dqs</div>
        <div class="row">
            <div class="col-xs-12">
                <p class="text-center">&copy; Copyright 2016 by <a href="{{ path('homepage') }}">WebAwards</a>.</p>
            </div>
        </div>
    </div>
</footer>

这里是login。html。twig我需要的赢家对象:

{% block footer %}
    <!-- WINNER IN UNDEFINED :'( -->
    {{ include('base.html.twig', {'winner': winner }) }}
{% endblock %}

大家都明白是怎么回事了吗?

看起来你定义了两次$winner,看一下:

$winner = $em->getRepository('WebAwardsBundle:Winner')->findBy(
  array('isDay' => '1')
);
...
$winner = $em->getRepository('WebAwardsBundle:Project')->findById($idProject);

这看起来绝对不对!

我解决我的问题:

  • 在Winner Controller中创建WinnerDay函数:

    public function winnerDayAction(){
    $em = $this->getDoctrine()->getManager();
    //Get All projects
    $projects = $em->getRepository('WebAwardsBundle:Project')->findAll();
    //Get the Winner of the day
    $winner = $em->getRepository('WebAwardsBundle:Winner')->findBy(
        array('isDay' => '1')
    );
    foreach($winner as $win){
        $idProject = $win->getIdProject();
    }
    $winner = $em->getRepository('WebAwardsBundle:Project')->findById($idProject);
    $userId = $winner[0]->getIdAuthor();
    $user = $em->getRepository('WebAwardsBundle:User')->findById($userId);
    
    return $this->render('footer.html.twig', array(
        'winner'   => $winner,
        'user'     => $user
    ));` 
    
  • 调用父模板(base.html.twig)中的动作

    `{{ render(controller('WebAwardsBundle:Winner:winnerDay' )) }}`
    
  • 最后我创建了一个footer.html.twig,其中变量现在是可用的