becklyn/javascript-context

一种将数据从PHP发送到JavaScript的方法。

安装: 876

依赖: 0

建议者: 0

安全性: 0

星星: 1

关注者: 3

分支: 0

开放问题: 0

类型:symfony-bundle

2.0.1 2019-11-26 15:27 UTC

This package is auto-updated.

Last update: 2024-08-27 02:50:40 UTC


README

一个简单的库,用于将数据从PHP发送到JavaScript。

使用方法

获取JavaScriptContext服务

use Becklyn\JavaScriptContext\Context\JavaScriptContext;


function doSomething (JavaScriptContext $context)
{
    $context
        ->set("some-data", 123)
        ->set("locale", "de");
}

之后将其嵌入到您的twig模板中

{{- javascript_context() -}}

容器将具有_javascript-context _data-container类和ID_javascript-context。要修改ID,请将新ID传递给函数

{{- javascript_context(null, "some_other_id") -}}

获取数据

要从script容器获取数据,只需JSON解析它,在移除HTML转义后,例如

let data = JSON.parse(
   (document.getElementById("_javascript-context").textContent || "")
       .replace(/&lt;/g, "<")
       .replace(/&gt;/g, ">")
       .replace(/&amp;/g, "&")
);

在JSON输出中,以下字符被HTML转义:<>&

上下文提供者

如果某些数据必须始终传递到模板,则注册上下文提供者会很方便。

use Becklyn\JavaScriptContext\Context\JavaScriptContext;
use Becklyn\JavaScriptContext\Provider\ContextProviderInterface;

class MyProvider implements ContextProviderInterface
{
    public function provideJavaScriptContext (JavaScriptContext $context, ?string $domain) : void
    {
        $context->set("some", "value");
    }
}

每个提供者接收要修改的上下文,以及可选的域。这只是一个string键,提供者可以使用它来决定是否附加数据。

例如,为了将上下文分开为appbackend,您只需注册所有提供者,然后在模板中像这样包含它

{# in your frontend #}
{{- javascript_context("app") -}}


{# and in the backend do #}
{{- javascript_context("backend") -}

您必须在服务中添加javascript_context.provider标签。如果您使用自动配置,则标签会自动添加。