通知下拉列表

时间:2019-05-16 13:32:36

标签: php symfony symfony-2.7

我有一个通知图标。当用户单击它时,将显示一个下拉列表并显示一个列表。我想过滤列表以仅显示与已连接用户有关的内容。

{% if app.user.roles[0] == "ROLE_DEVELOPPER"%}
<!-- dropdown notification message -->
<li class="dropdown">
    <a title="Notifications" href="#fakelink" class="dropdown-toggle" data-toggle="dropdown">
        <strong> <i class="fa fa-bell"></i></strong>

    </a>
    {% if notif_conges|length > 0 %}
    <ul class="dropdown-menu animated half flipInX">
        //this section
        {% for notif_c in notif_conges %}

        {% if  notif_c.etat == "Acceptée" %}
        <li><a>Votre demande : "{{notif_c.motif}}" Envoyée le "{{notif_c.CreatedAt|date('Y-m-d H:i:s')}}" a était traitée </a></li>
        {% endif %}

        {% endfor %}

    </ul>
    {% endif %}

</li>
{% endif %}

2 个答案:

答案 0 :(得分:0)

您必须使用is_granted树枝过滤器。

您可以指定自己的用户角色,但向所有登录用户赋予 IS_AUTHENTICATED_REMEMBERED 角色。

{% is_granted('IS_AUTHENTICATED_REMEMBERED') %}
<!-- dropdown notification message -->

...

{% endif %}

答案 1 :(得分:0)

您要过滤通知。只需要显示有关已连接用户的通知。您有两种解决方案:

(非常)不好的方法:在视图中添加测试

    <ul class="dropdown-menu animated half flipInX">
        //this section
        {% for notif_c in notif_conges %}

        {% if  notif_c.etat == "Acceptée" and notif_c.user = app.user %}
        <li><a>Votre demande : "{{notif_c.motif}}" Envoyée le "{{notif_c.CreatedAt|date('Y-m-d H:i:s')}}" a était traitée </a></li>
        {% endif %}

        {% endfor %}

    </ul>

这是一种不好的方法,因为您会将所有通知转发到视图

不好的方法:在控制器中添加过滤器

class YourController
{
    public yourAction()
    {
       /** ... your code to handle notifications **/
       foreach ($notifications as $notification) {
          if ($notification->getUser()->getId() == $this->getUser()->getId)) {
             $filteredNotification[] = $notification;
          }
       }
       return $this->render('your_template_file', [
           'notif_c' => $filteredNotifications
       ]);
    }
}

这仍然是一种不好的方法,因为您正在从数据库中检索所有通知。

好方法:仅向存储库询问必要的通知 假设您的通知是使用Doctrine检索的,则存储库可以过滤数据以仅检索相关数据。

class YourController
{
    public yourAction()
    {
       /** ... your code is certainly something lke this: **/
         $notificationRepository = $this->entityManager->getRepository('AppBundle:Notification');
         $notifications = $notificationRepository->findAll();
         render 

       return $this->render('your_template_file', [
           'notif_c' => $notifications
       ]);
    }
}

findAll()替换为findBy(array $criteria),并添加一个条件作为第一个参数:

class YourController
{
    public yourAction()
    {
         $notificationRepository = $this->entityManager->getRepository('AppBundle:Notification');
         $notifications = $notificationRepository->findBy([
           'etat' => 'Acceptée',
           'user' => $this->getUser(), //this could be a little different, I do not remember how to handle user in Sf2.8
         ]);
         render 

       return $this->render('your_template_file', [
           'notif_c' => $notifications
       ]);
    }
}