将 Symfony 路由器与 vue.js 一起使用

Using the Symfony Router with vue.js

我对 symfony 很陌生,对 vue.js 有一点经验。经过一些研究后,我无法找到解决问题的方法。

我有以下问题:

我正在使用 Symfony 和 vue.js 为前端构建一个多页应用程序。我在模板 index.html.twig 中使用搜索表单从 API 中获取有关给定搜索查询的信息。

因此我在 Symfony 中使用路由。当点击搜索按钮时, URL xxx/search?query=test 被调用。这个 URL 由我的 symfony 控制器处理,它从 API 获取数据并呈现页面 search-result.html.twig。我在 index.html.twig 中使用 Vue.js,我也想在 search-result.html.twig(以及其他路由和页面)中使用 Vue,但我不太确定如何在不同的平台上使用不同的 vue 实例页数。

希望我能够正确描述问题!期待您的建议。

更新:

这是我当前的基础架构:

base.html.twig(所有其他页面继承自该模板):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}Welcome!{% endblock %}</title>
        {% block stylesheets %}
            {{ encore_entry_link_tags('app') }}
        {% endblock %}
    </head>
    <body>
        <div id="app">
            {% block body %}{% endblock %}
        </div>
   </body>
   {% block javascripts %}
     {{ encore_entry_script_tags('app') }}
   {% endblock %}
</html>

这是我初始化 vue 实例的方式:

import Vue from 'vue';
import App from './App.vue';

new Vue({
  render: h => h(App)
}).$mount('#app');

从 App.vue 然后我发送我的不同组件。

问题是:当我现在打开不同的 twig 文件时,我无法使用不同的页面布局。

您可能希望有多个具有不同入口点的 Vue-Apps 可以在您的 Symfony 应用程序中使用。从看起来您有 3 个地方必须进行更改。根据详细信息,您可能还需要进行其他更改。

Webpack 配置

这需要您将这些入口点添加到您的 webpack.config.js 例如通过为 searchApp 添加入口点。

你的vue"bootstrap"文件

然后您必须为新应用复制 app.js(或存储您问题中的 Vue 代码段的任何位置)并进行调整,例如您可以使用 import SearchApp from './SearchApp.vue' 而不是 import App from './App.vue'(然后进一步更新 App 调用)。

您的模板

现在你的项目中应该有 2 个 vue 应用程序和 2 个 webpack 入口点来加载它们的数据 (CSS/JS)。您的 base.html.twig 将为具有入口点 app 的原始应用程序加载 javascript。您现在必须告诉 search-result.html.twig 用新入口点的文件覆盖这些文件(假设:searchApp):

{% extends "base.html.twig" %}

{% block stylesheets %}{{ encore_entry_link_tags('searchApp') }}{% endblock %}
{% block javascripts %}{{ encore_entry_script_tags('searchApp') }}{% endblock %}

如果其中一个块包含一些共享资源,您还可以添加一个 {{ parent() }} 调用以从 base.html.twig 加载它们,但要注意不要在您的 JS 调用中发生冲突。现在 search-result.html.twig 应该加载新的 Vue-app。您现在可以根据需要更改该应用的布局,它不会影响您的其他应用。