Уведомление Symfony Mgilet Обработка событий пакета

У меня нет большого опыта работы с Symfony, но я работаю над приложением Symfony 4, которое использует https://github.com/maximilienGilet/notification-bundle
Добавление и отображение уведомлений работает хорошо, но я застрял при обработке событий, создаваемых комплектом.

Форма в шаблоне ветки (фактически в моем базовом шаблоне ветки) вызывает действие связки post markasseen, которое возвращает истинное сообщение JSON, но теперь я не знаю, как вернуться к URL-адресу (маршруту), с которого выполняется пост-вызов готово?

Это мой routers.yaml, который «активирует» контроллер пакета:

App\EventListener\NotificationListener:
arguments: ['@router']
tags:
- { name: kernel.event_listener, event: mgilet.notification.seen }

Как вы можете видеть, я пытался передать параметр маршрутизатора, чтобы увидеть, дает ли это мне возможность «вернуться», но, к сожалению, это не помогло.

Это EventListener, который я создал для обработки события bundle:

<?php

namespace App\EventListener;

use Mgilet\NotificationBundle\Event;
use Mgilet\NotificationBundle\Event\NotificationEvent;

use \Symfony\Bundle\FrameworkBundle\Routing\Router;
use \Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;

class NotificationListener
{
private $router;

public function __construct(Router $router) {
$this->router = $router;
}

public function OnMgiletNotificationSeen(Event\NotificationEvent $event): void {
dd($event);
}

}

Как я уже упоминал, событие перехватывается слушателем, оно возвращает «true», но я хочу вернуться к маршруту / контроллеру, откуда вызывается действие post.

Это форма в базовом шаблоне (потому что я хочу показать уведомления во всех шаблонах), которая вызывает контроллер уведомлений:

<form action="/notifications/1/mark_as_seen/8" method="post">
<button type="submit" class="close">
<span aria-hidden="true">×</span><span class="sr-only">Close</span>
</button>
</form>

Кто-нибудь может мне помочь, пожалуйста!

0

Решение

как https://stackoverflow.com/a/28913544/5475228 скажем, вы можете получить текущий маршрут, используя переменную twig следующим образом:

app.request.attributes.get('_route')

также вы можете иметь предыдущий маршрут с этим:

app.request.headers.get('referer')

Итак, если я понимаю вашу проблему, вы можете перенаправить на этот маршрут после того, как ответ json верен.

0

Другие решения

Я решил свою проблему (временно), хотя я не думаю, что это лучший способ решить.

Я отключил контроллер связки в routs.yaml и создал пользовательский контроллер, который обрабатывает сообщения.

class NotifyController extends Controller
{
/**
* Set a Notification as seen
* @Route("/notifications/{notifiable}/mark_as_seen/{notification}", name="notification_mark_as_seen", methods={"POST"})
*/
public function markAsSeenAction($notifiable, $notification, Request $request)
{
$manager = $this->get('mgilet.notification');
$manager->markAsSeen(
$manager->getNotifiableInterface($manager->getNotifiableEntityById($notifiable)),
$manager->getNotification($notification),
true
);

return $this->redirect($request->headers->get('referer'));
}

/**
* Set all Notifications for a User as seen
* @Route("/notifications/{notifiable}/markAllAsSeen", name="notification_mark_all_as_seen", methods={"POST"})
*/
public function markAllAsSeenAction($notifiable, Request $request)
{
$manager = $this->get('mgilet.notification');
$manager->markAllAsSeen(
$manager->getNotifiableInterface($manager->getNotifiableEntityById($notifiable)),
true
);

return $this->redirect($request->headers->get('referer'));
}
}

Спасибо всем за помощь!

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector