通知下拉symfony
Notification dropdown symfony
我有一个通知图标。当用户单击它时,会出现一个下拉列表并显示一个列表。我想过滤列表以仅显示与已连接用户相关的内容。
{% 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 %}
你必须使用 is_granted twig 过滤器。
您可以指定您的用户角色,但 IS_AUTHENTICATED_REMEMBERED 角色将授予所有登录用户.
{% is_granted('IS_AUTHENTICATED_REMEMBERED') %}
<!-- dropdown notification message -->
...
{% endif %}
您想过滤通知。只需要显示有关已连接用户的通知。您有两个解决方案:
(非常)糟糕的方法:在视图中添加测试
<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
]);
}
}
我有一个通知图标。当用户单击它时,会出现一个下拉列表并显示一个列表。我想过滤列表以仅显示与已连接用户相关的内容。
{% 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 %}
你必须使用 is_granted twig 过滤器。
您可以指定您的用户角色,但 IS_AUTHENTICATED_REMEMBERED 角色将授予所有登录用户.
{% is_granted('IS_AUTHENTICATED_REMEMBERED') %}
<!-- dropdown notification message -->
...
{% endif %}
您想过滤通知。只需要显示有关已连接用户的通知。您有两个解决方案:
(非常)糟糕的方法:在视图中添加测试
<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
]);
}
}