将变量从控制器发送到视图

时间:2017-01-31 17:58:57

标签: symfony

我的项目有问题 我想从控制器向视图发送变量。 在动作中,我想获取当前用户的ID(我正在使用FOSUserBundle),然后在通知表中搜索该用户的通知数量。 最后我想将号码发送到视图。 但我总是得到这个错误“变量”通知N“不存在。”。 我该怎么办? 这个动作:

public function notificationNumberAction(){
        $user = $this->container->get('security.context')->getToken()->getUser();
        $user->getId();
        $sql = "SELECT COUNT(*) FROM notification WHERE userId=".$user.";";

        $em = $this->getDoctrine()->getManager();
        $stmt = $em->getConnection()->prepare($sql);
        $n=$stmt->execute();

        return $this->render('EnigmaSocialProBundle::layout.html.twig',array("notificationN"=>$n));
    }

2 个答案:

答案 0 :(得分:0)

您可以直接在树枝模板中访问用户数据,而无需在控制器中请求任何内容。用户可以像这样访问:app.user。

你可以这样做:

{% if is_granted("ROLE") %}
    Hi {{ app.user.username }}
{% endif %}

答案 1 :(得分:0)

我找到了解决方案

$this->container->get('security.context')->getToken()->getUser()

不能使用symfony3,现在我只需要$ this-> getUser()来获取当前用户

新动作是:

$user = $this->getUser();
        $user->getId();

        $em = $this->getDoctrine()->getEntityManager();
        $stmt = $em->createQueryBuilder('n')->select('COUNT(n)')->from('EnigmaSocialProBundle:Notification','n')
            ->where('n.userId = :p')->setParameter('p',$user);
        $n=$stmt->getQuery()->getSingleScalarResult();