【发布时间】:2018-08-29 17:25:47
【问题描述】:
我有一个 symfony 2.8 应用程序,我最近集成了 VueJs 2 作为我的前端框架,因为它提供了很大的灵活性。 我的应用程序不是单页的,我使用 symfony 控制器来呈现视图。所有的视图都包裹在一个基本的树枝布局中:
<!DOCTYPE html>
<html lang="{{ app.request.locale|split('_')[0] }}">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
</head>
<body>
<div id="app">
{% block body %} {% endblock %}
</div>
<script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script>
<script src="/js/fos_js_routes.js"></script>
<script type="text/javascript" src="{{ asset('build/vendor-bundle.js') }}"></script>
<script type="text/javascript" src="{{ asset('build/vue-bundle.js') }}"></script>
</body>
</html>
我使用 webpack 加载大部分 JS,我所有的 vue 组件和 JS 依赖项都编译在 vendor-bundle.js 和 vue-bundle.js 中。我的 VueJs 实例如下所示:
import './components-dir/component.vue'
import './components-dir/component2.vue'
Vue.component('component', Component);
Vue.component('component2', Component2);
window.onload = function () {
new Vue({
el: '#app',
components: {}
});
};
我想将一些 php 变量从控制器传递到 vuejs 组件,但我无法使其工作。
一个非常简单的控制器示例如下所示:
/**
* @Route("/contract", name="contract")
* @Method("GET")
*/
public function indexAction()
{
$paymentMethods = PaymentMethod::getChoices();
return $this->render('contracts/index.html.twig', [
'paymentMethods' => $serializer->normalize($paymentMethods, 'json'),
]);
}
所有的 html、css 和 js 都由 vueJs 处理。树枝视图如下所示:
{% extends 'vue-base.html.twig' %}
{% block body %}
<contracts :paymentMethods="{{paymentMethods | raw}}"></contracts>
{% endblock %}
contracts.vue 组件如下所示:
<template>
<div>
<p>Hi from component</p>
</div>
</template>
<script>
export default {
data() {
return {}
},
props: ['paymentMethods'],
mounted: function () {
console.log(this.paymentMethods)
}
}
</script>
<style>
</style>
如何将 php 变量作为 props 传递给 vueJs ?
在上面的示例中,我没有收到任何错误,但属性没有传递给 vuejs。控制台日志打印undefined。
我希望能够做到这一点,因为我不想有 SPA,但我也想将一些变量从 symfony 传递给 vue,因为我不必提出额外的请求。
【问题讨论】:
-
你找到解决办法了吗?
标签: javascript php symfony vue.js twig