Простое исправление, чтобы заставить это работать:

могу получитьFOSJsRoutingBundle работать сSymfony Flex, веб-пакет а такжеAngularJS.

Я давно использовал этот пакет в Symfony 3 с AngularJS, и никогда не было проблем, но с появлением веб-пакета в Symfony Flex настройка стала более сложной. К сожалению, документация для FOSJsRoutingBundle версии 2.2 не ясна.

Вы можете найти текущую документацию для этого пакетаВот.

Я используюFOSJsRoutingBundle так что мои угловые HTTP-запросы могут использовать сгенерированные маршруты, а не абсолютные URL.

Проблема

Я установил этот пакет, как описано в документации композитора. Затем маршруты сбрасываются в файл json, расположенный по адресуcode/assets/fos_js_routes.json, Сгенерированные маршруты в этом файле действительны и что я ожидаю увидеть.

Поскольку я использую Angular, я хочу сделать первоначальное требуемое объявление о маршрутизации в отдельном файле, чтобы все мои контроллеры Angular могли использоватьRouting. без необходимости какой-либо дальнейшей работы с этими файлами.

Установочный файл FOS /code/assets/js/fos_js_router.js (Следующая документация)

const routes = require('../../assets/fos_js_routes.json');
import Routing from '../../vendor/friendsofsymfony/jsrouting-bundle/Resources/public/js/router.min.js';

Routing.setRoutingData(routes);

Образец углового файла /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 Config

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 %}
Ошибка

Из приведенной выше настройки я получаюtest.js: ReferenceError: Routing is not defined at в моих файлах AngularJS.

Что мне нужно сделать по-другому, чтобы я мог использоватьlet url = Routing.generate('test_route_name'); в моих файлах AngularJS?

Ответы на вопрос(2)

Ваш ответ на вопрос