sroze/live-twig

dev-master 2020-10-05 10:39 UTC

This package is auto-updated.

Last update: 2024-09-06 00:46:08 UTC


README

让我们摆脱单页面应用!这里是获取实时Twig块的基本方法。吻别。😘

设置

  1. 安装依赖项

    composer req sroze/live-twig

  2. 运行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

  3. 获取您的Mercure JWT令牌。如果您使用默认的演示JWT_KEY,您可以从正在运行的Hub主页获取令牌。

  4. 设置环境变量

    .env

    ...

    MERCURE_PUBLISH_URL=http://localhost/.well-known/mercure MERCURE_JWT_TOKEN=[您的令牌]

  5. (在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'));