首页 > 解决方案 > 如何将 Symfony 5 bundle 中定义的路由自动添加到项目中?

问题描述

我想Symfony 5.3+在不同项目之间创建一个捆绑共享代码。虽然在我的项目中使用此包中的控制器、EventListeners 和其他自定义类没有问题,但我很难在包中定义路由并在项目中使用它们。如何才能做到这一点?


细节:

我使用以下结构创建了一个捆绑项目,并使用 composer 将其添加到我的 Symfony 项目中:

path/to/bundles/XYCommonsBundle/
    config/
        services.yaml
        routes.yaml
    src/
        Controller/
            SomeController.php
        DependencyInjection
            XYCommensExtension.php
    XYCommensBundle.php
    composer.json
    ...


// config/routes.yaml
xy_commons_some_route:
    path: /some/route/path
    controller: XY\CommonsBundle\Controller\SomeController::something

我发现许多教程展示了如何config/service.yamlload()我的XYCommensExtension.php. 我也尝试在routes.yaml此处添加:

// src/DependencyInjection/XYCommensExtension.php
<?php

namespace XY\CommensBundle\DependencyInjection;

use ...

class XYCommensExtension extends Extension {
    public function load(array $configs, ContainerBuilder $container) {
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../../config'));
        $loader->load('services.yaml');
        $loader->load('routes.yaml');
    }
}

使用 Composer 将捆绑包添加到我的项目时,这会失败并出现异常:

没有扩展能够加载“xy_commons_some_route”的配置(在“/path/to/bundle/../../config/routes.yaml”中)。寻找命名空间“xy_commons_some_route”,发现“无”。

那么如何将捆绑包中的路由添加到我的项目中呢?这可以在添加捆绑包时自动完成,还是我必须手动将路由添加到我的项目routes.yaml文件中(如何在此处访问/寻址捆绑包路由)?

标签: symfonybundle

解决方案


推荐阅读