1. Go to this page and download the library: Download raneomik/nette-mercure library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
raneomik / nette-mercure example snippets
use Raneomik\NetteMercure\BroadcasterInterface;
use Raneomik\NetteMercure\Core\Publish\Latte\TurboStream\Action;
final class SomeService
{
public function __construct(
private BroadcasterInterface $broadcaster,
) {
}
public function someAction(): void
{
// ...
// minimalist broadcast to default hub
$this->broadcaster->broadcast(
data: 'Hello Nette from Mercure!', // ['message' => 'message'] / new Class('message')
topics: 'test-topic' // ['test-topic']),
);
// broadcast to specific hub
$this->broadcaster->broadcast(
data: 'Hello Nette from Mercure!',
topics: ['test-topic'],
template: 'test.latte', // existing template
options: [
'hub' => 'two' // hub name defined in configuration and where to publish, default is first found hub
],
);
// broadcast to all hubs
$this->broadcaster->broadcast(
data: 'Hello Nette from Mercure!',
topics: ['test-topic'],
template: 'test.stream.latte',
options: [
'action' => Action::Update // for turbo streams or block organisation in same template. Template must have Action blocks
],
toAll: true,
);
// ...
}
}
use Nette;
use Nette\Application\Attributes\Parameter;
use Raneomik\NetteMercure\SubscriberInterface;
final class SubscribePresenter extends Nette\Application\UI\Presenter
{
#[Parameter]
public ?string $hub = null;
#[Parameter]
public string|array $topics = ['*'];
public function __construct(
private readonly SubscriberInterface $subscriber,
) {
}
public function renderDefault(): void
{
if (!$this->isAjax()) {
return;
}
$this->sendJson(
$this->subscriber->subscribe($this->hub, $this->topics),
);
}
}
//...
$this->broadcaster->broadcast(
data: 'Hello Nette from Mercure!',
topics: ['test-topic'],
//to activate "text/vnd.turbo-stream.html" content type and "turbo-stream" mercure event type to listen to, template name must end with ".stream.latte" / "Stream.latte" and have matching "action" blocks
template: 'test.stream.latte',
options: [
/** @see Raneomik\NetteMercure\Core\Publish\Latte\TurboStream\Action for available action blocks */
'action' => Action::Update
'target' => 'stream-container' // target container id to update in client side. Default is "stream-container"
],
);
//...
html
<!-- test.stream.latte template, near to the broadcaster call -->
{contentType $contentType ?? 'text/html'}
{block update}
<turbo-stream action="update" target="{$target ?? 'stream-container'}">
<template>
{$data}
</template>
</turbo-stream>
{/block}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.