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

问题描述 投票:1回答:1

我对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实例。

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

UPDATE:

这是我当前的基础结构:

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中分派我的不同组件。

问题是:当我现在打开另一个树枝文件时,无法使用其他页面布局。

symfony vue.js routing
1个回答
1
投票

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

Webpack配置

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

您的vue“引导程序”文件

然后您必须为新应用复制app.js(或问题中Vue片段的存储位置)并进行调整,例如而不是import App from './App.vue',您可以拥有import SearchApp from './SearchApp.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应用程序。现在,您可以根据需要更改该应用程序的布局,并且它不会打扰其他应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.