温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Passing Twig variables to Vue.js in Symfony
symfony twig vue.js

其他 - 在Symfony中将Twig变量传递给Vue.js

发布于 2020-08-31 12:00:33

我正在启用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数组吗?如果我想准备一些将在我的标头中使用的全局变量,应该是哪个控制器,因此它们不应仅在一个控制器上被锁定。

查看更多

提问者
The50
被浏览
19
fbuchlak 2020-05-11 03:03

假设您呈现多个“ 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"