我正在启用Vue.js的情况下运行Symfony 4应用程序。有什么好的做法可以将我的数据从Twig模板发送到Vue.js组件?当前,我的头部件上有许多数据项,例如HTML元素数据部分如下所示:
<header-nav class="headnav headnav-fixed z-depth-1"
logo="{{ asset('build/images/site_logo.png') }}"
username="{{ app.user.name }}"
logout-url="{{ path('logout') }}"
logout-title="{% trans %} Logout {% endtrans %}"
instruction-url="{{ path('system_instruction_download') }}"
instruction-title="{% trans %} Download instruction {% endtrans %}"
current-locale="{{ app.request.getLocale()|upper }}"
v-bind:locales="{{ locales|json_encode }}"
>
假设我有许多不同的URL和其他内容。发送数据的最佳方法是什么?我应该首先在控制器上准备一个URL数组吗?如果我想准备一些将在我的标头中使用的全局变量,应该是哪个控制器,因此它们不应仅在一个控制器上被锁定。
假设您呈现多个“ vue应用程序”,则可以使用以下命令定义全局变量
1)树枝配置
文档说:“ Twig允许自动将一个或多个变量注入所有模板。这些全局变量在主Twig配置文件中的twig.globals选项中定义”
2)您可以使用函数合并变量创建抽象控制器
// MyAbstractController.php
protected function getTwigVariables(array $vars) {
$globals = [];
// ... fill $globals with your stuff
return array_merge(['globalVar1' => ], $vars);
}
// TestController extends MyAbstractController
public function indexAction() {
//...
return $this->render('viewPath.html.twig', $this->getTwigVariables([
'specificVariable' => 'variableContent'
]));
}
您也可以在主树枝中嵌入控制器。您可以创建headerAction,footerAction等,并为此操作创建子请求。
为了存储变量,您还可以使用脚本标签
// twig
<script id="serverJson" type="application/json">{{ jsonContent|json_encode()|raw }}</script>
// serverJson.js
const configElement = document.getElementById("serverJson");
export default JSON.parse(configElement.innerHTML);
// ViewTemplate.vue
import serverJson from "path-to-serverJson.js"
第一个例子看起来像我需要的东西。谢谢。