【问题标题】:Share same variable multiple templates TWIG/SYMFONY共享同一个变量多个模板 TWIG/SYMFONY
【发布时间】:2016-09-02 15:39:24
【问题描述】:

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

这是我的控制器:

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 中有一个“赢家”对象:

<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 被传递给login.html.twig 模板吗?像 $this-&gt;render('login.html.twig', array('winner' =&gt; $winner)) 在你的控制器中?
  • 是的,抱歉,仍未定义...
  • 能否请您显示异常的屏幕截图?
  • @Yonel 不确定您要通过编辑修复什么,但是以这种方式完全删除一大块代码看起来真的很糟糕。你是不是想歪曲这个问题?

标签: php twig symfony


【解决方案1】:

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

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

这绝对看起来不对!

【讨论】:

  • 谢谢,其实第一个$winner是唯一的获胜项目的id,第二个是项目本身
  • 嗨。我看到你是 Stackoverflow 的新手。如果您发现任何 cmets 有用或有帮助,您应该单击向上的三角形。谢谢!
【解决方案2】:

我解决了我的问题:

  • 在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,变量现在可用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 2016-08-20
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多