Уведомление выпадающего Symfony - PullRequest
0 голосов
/ 16 мая 2019

У меня есть значок уведомления.Когда пользователь нажимает на него, появляется выпадающий список и показывает список.Я хочу отфильтровать список, чтобы показать только то, что связано с подключенным пользователем.

{% 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 голосов
/ 17 мая 2019

Вы хотите фильтровать уведомления. Должны отображаться только уведомления, касающиеся подключенных пользователей. У вас есть два решения:

(очень) плохой способ: добавить тест в поле зрения

    <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
       ]);
    }
}
0 голосов
/ 16 мая 2019

Йо должен использовать фильтр ветки is_granted.

Вы можете указать одну пользовательскую роль, но IS_AUTHENTICATED_REMEMBERED роль предоставляется всем пользователям, вошедшим в систему.

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

...

{% endif %}
...