sroze / live-twig
dev-master
2020-10-05 10:39 UTC
Requires
This package is auto-updated.
Last update: 2024-09-06 00:46:08 UTC
README
让我们摆脱单页面应用!这里是获取实时Twig块的基本方法。吻别。😘
设置
-
安装依赖项
composer req sroze/live-twig
-
运行Mercure Hub。您可以通过查看Mercure文档来了解。最简单的方法是使用Docker
docker run --rm -e CORS_ALLOWED_ORIGINS='https://127.0.0.1:8000' -e JWT_KEY='!ChangeMe!' -e DEMO=1 -e ALLOW_ANONYMOUS=1 -e PUBLISH_ALLOWED_ORIGINS='http://localhost,http://localhost:8000' -p 80:80 dunglas/mercure
-
获取您的Mercure JWT令牌。如果您使用默认的演示
JWT_KEY
,您可以从正在运行的Hub主页获取令牌。 -
设置环境变量
.env
...
MERCURE_PUBLISH_URL=http://localhost/.well-known/mercure MERCURE_JWT_TOKEN=[您的令牌]
-
(在Flex配方完成之前)注册包
// config/bundles.php return [ // ... Symfony\Bundle\LiveTwigBundle\LiveTwigBundle::class => ['all' => true], ];
创建以下配置文件
# config/packages/live_twig.yaml live_twig: mercure_public_url: "%env(MERCURE_PUBLISH_URL)%"
使用它!
在任何 Twig 模板中,渲染一个实时块
{{ render_live( controller('App\\Controller\\YourController::yourAction', { some: 'parameter' }), {'topics': ['foo', 'bar-' ~ baz]} ) }}
当此块包含的数据发生变化时,发布一个空的Mercure更新
<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Mercure\Publisher; use Symfony\Component\Mercure\Update; use Symfony\Component\Routing\Annotation\Route; class LiveController extends AbstractController { /** * @Route("/foo") */ public function index(Publisher $publisher) { // ... $publisher(new Update(['foo', 'bar-'.$bar])); // ... } }
当浏览器接收到信号时,它将发送一个GET请求以检索块的新版本。或者,您还可以将显示数据作为更新的内容传递。在这种情况下,不会触发额外的HTTP请求
// ... $publisher(new Update(['foo', 'bar-'.$bar], 'the updated content of the block'));