I’m trying to set up notifications using Symfony UX Notify. I followed the documentation here: text and also used the documentation to set up the Mercure server: text
Here’s how I configured my .env file:
###> symfony/mercure-notifier ###
MERCURE_DSN=mercure://default
###< symfony/mercure-notifier ###
###> symfony/mercure-bundle ###
# See https://symfony.com/doc/current/mercure.html#configuration
# The URL of the Mercure hub, used by the app to publish updates (can be a local URL)
MERCURE_URL=http://localhost:62635/.well-known/mercure
# The public URL of the Mercure hub, used by the browser to connect
MERCURE_PUBLIC_URL=http://localhost:62635/.well-known/mercure
# The secret used to sign the JWTs
MERCURE_JWT_SECRET= my jwt token here
###< symfony/mercure-bundle ###
And here’s how my notifier.yaml file looks like:
framework:
notifier:
chatter_transports:
myMercureChatter: '%env(MERCURE_DSN)%'
To create notifications, I didn’t use a Command but did it in the controller:
use SymfonyComponentNotifierBridgeMercureMercureOptions;
use SymfonyComponentNotifierExceptionTransportExceptionInterface;
use SymfonyComponentNotifierMessageChatMessage;
use SymfonyComponentNotifierChatterInterface;
class PageIndexController extends DefaultLayoutController
{
public function __construct(
ThemeHelper $theme,
private readonly EntityManagerInterface $entityManager,
private readonly IndexLinkRepository $indexLinkRepository,
private ChatterInterface $chatter
)
{
parent::__construct($theme);
}
// Other controller code
// Method where I create the notification
#[Route('/new', name: 'app_page_index_new', methods: ['GET', 'POST'])]
public function new(Request $request, ParameterBagInterface $parameterBag): Response
{
/** @var User $user */
$user = $this->getUser();
$dto = new IndexLinksDTO();
$form = $this->createForm(IndexLinksType::class, $dto, [
'validation_groups' => ['basic']
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$dto->setUser($user);
$cost = $parameterBag->get('page_index_cost');
$totalCost = count($dto->getLinks()) * $cost;
if ($user->getBalance() < $totalCost) {
$this->addFlash('error', "You do not have enough tokens to index these links.
Indexing one link costs $cost tokens. Please top up your balance for quality
link indexing.");
return $this->redirectToRoute('app_page_index_new');
}
$entityManager = $this->entityManager;
foreach ($dto->getLinks() as $link) {
$indexLink = new IndexLink();
$indexLink->setUser($user);
$indexLink->setUrl($link->getUrl());
$indexLink->setUserTokens($cost);
$entityManager->persist($indexLink);
}
$user->setBalance($user->getBalance() - $totalCost);
$entityManager->flush();
$message = (new ChatMessage(
'Success!!! Links added successfully for indexing.',
new MercureOptions(['/index/link-indexing'])
))->transport('myMercureChatter');
$this->chatter->send($message);
return $this->redirectToRoute('app_page_index');
}
return $this->render('pages/page_index/create.html.twig', [
'form' => $form->createView(),
]);
}
}
After that, I add this line to the TWIG template:
{{ stream_notifications(['/index/link-indexing']) }}
But when I add a link and it’s successful, the notification doesn’t come through. Can you please advise on what I’m doing wrong or what I’m missing? Thank you!