becklyn / javascript-context
一种将数据从PHP发送到JavaScript的方法。
2.0.1
2019-11-26 15:27 UTC
Requires
- php: ^7.2
- ext-json: *
- symfony/config: ^4.3 || ^5.0
- symfony/dependency-injection: ^4.3 || ^5.0
- symfony/http-kernel: ^4.3 || ^5.0
- symfony/phpunit-bridge: ^5.0
- twig/twig: ^2.11 || ^3.0
Requires (Dev)
- roave/security-advisories: dev-master
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(/</g, "<") .replace(/>/g, ">") .replace(/&/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
键,提供者可以使用它来决定是否附加数据。
例如,为了将上下文分开为app
和backend
,您只需注册所有提供者,然后在模板中像这样包含它
{# in your frontend #} {{- javascript_context("app") -}} {# and in the backend do #} {{- javascript_context("backend") -}
您必须在服务中添加javascript_context.provider
标签。如果您使用自动配置,则标签会自动添加。