我有一个通知图标。当用户单击它时,将显示一个下拉列表并显示一个列表。我想过滤列表以仅显示与已连接用户有关的内容。
{% 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 %}
答案 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
]);
}
}