我无法让**FOSJsRoutingBundle与Symfony Flex、Webpack和AngularJS配合使用。
我已经在Symfony 3和AngularJS中使用这个包很长时间了,从来没有出现过问题,但是随着Symfony Flex中webpack的引入,设置变得更加复杂。不幸的是,FOSJsRoutingBundle版本2.2的文档并不清楚。
您可以找到此bundle here的最新文档。
我使用了FOSJsRoutingBundle**,这样我的Angular HTTP请求就可以使用生成的路由而不是绝对URL。
问题
我已经通过 composer 设置这个捆绑文件。然后将路由转储到位于code/assets/fos_js_routes.json
的json文件中。这个文件中生成的路由是有效的,也是我期望看到的。
因为我使用Angular,所以我想在一个单独的文件中做路由的初始声明,这样我所有的Angular控制器都可以使用Routing.
,而不必在这些文件中做任何进一步的工作。
FOS设置文件/code/assets/js/fos_js_router.js
(Following documentation)
const routes = require('../../assets/fos_js_routes.json');
import Routing from '../../vendor/friendsofsymfony/jsrouting-bundle/Resources/public/js/router.min.js';
Routing.setRoutingData(routes);
示例Angular文件/code/assets/js/apps/default/controller/test.js
(function () {
'use strict';
angular.module('test')
.controller(
'TestCtrl',
['$scope', '$http',
function ($scope, $http) {
let url = Routing.generate('test_route_name');
}
])
});
Webpack配置
var Encore = require('@symfony/webpack-encore');
Encore
.setOutputPath('public/build/')
.setPublicPath('/build')
.addEntry('app', './assets/js/app.js')
.addEntry('app_fos_router', [
'./assets/js/fos_js_router.js'
])
.addEntry('app_angular', [
'./assets/js/apps/default/app.js', // angular app setup
'./assets/js/apps/default/routes.js', // angular routes setup
'./assets/js/apps/default/controller/test.js' // angular where Routing is needed
])
.enableSingleRuntimeChunk()
.cleanupOutputBeforeBuild()
.enableBuildNotifications()
.enableSourceMaps(!Encore.isProduction())
.enableVersioning(Encore.isProduction())
;
module.exports = Encore.getWebpackConfig();
前端小枝模板
{% extends 'base.html.twig' %}
{% block title %}Test{% endblock %}
{% block javascripts %}
{{ encore_entry_script_tags('app') }}
{{ encore_entry_script_tags('app_fos_router') }}
{{ encore_entry_script_tags('app_angular') }}
{% endblock %}
{% block body %}
<div ng-app="test" ui-view="content"></div>
{% endblock %}
错误
从上面的设置中,我在AngularJS文件中得到了test.js: ReferenceError: Routing is not defined at
。
我需要做些什么不同的事情才能在AngularJS文件中使用let url = Routing.generate('test_route_name');
?
3条答案
按热度按时间wh6knrhe1#
在
assets/js
目录中创建文件router.js
。接下来,用以下内容填充router.js
:在
webpack.config.js
中提供新变量,如下所示:添加新的加载器到您的webpack:
最后扩展webpack配置:
它应该使Routing成为一个全局对象,这样你就可以在其他js文件中使用它,如下所示:
希望能帮上忙。干杯
oymdgrw72#
简单的修复来获得此工作:
ff29svar3#
使用Webpack,您不需要做所有这些。只需将此添加到您的webpack:
然后通过添加来使用它: