Symfony:如何从第三方包加载工作流配置

Symfony:如何从第三方包加载工作流配置,symfony,symfony-workflows,Symfony,Symfony Workflows,我正在创建一个使用工作流组件的捆绑包 我在文件Resources/config/workflows.yml中创建了一个工作流 然后我尝试从AcmeAwesomeBundleExtension类自动加载此文件: /** * {@inheritdoc} */ public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $confi

我正在创建一个使用
工作流
组件的捆绑包

我在文件
Resources/config/workflows.yml
中创建了一个工作流

然后我尝试从
AcmeAwesomeBundleExtension
类自动加载此文件:

/**
 * {@inheritdoc}
 */
public function load(array $configs, ContainerBuilder $container)
{
    $configuration = new Configuration();
    $config        = $this->processConfiguration($configuration, $configs);
    $loader        = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));

    // This loads the Workflows
    $loader->load('workflows.yml');

    $loader->load('services.yml');

    ...
    }
}
这是
workflows.yml
文件的内容:

framework:
    workflows:
        the_name:
            type: workflow
            supports:
                - My\Bundle\Namespace\Entity\MyEntity
            places:
                - wait_config
                - configured
            transitions:
                give_config:
                    from: wait_config
                    to: configured
目前没有这么复杂的事情

但这会返回一个错误:

执行“'cache:clear--no warmup'”时出错 命令:

[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException]

There is no extension able to load the configuration for "framework" (in /U    
sers/Aerendir/Documents/JooServer/_Projects/Coommercio/Apps/app-coommercio-

www/vendor/myvendor/myawesomebundle/src/DependencyInjection/../Resources/config/workflows.yml). Looked for namespace "framework", found none
显然,如果我直接在我的
config.yml
文件(我的应用程序之一)中手动导入该文件,所有内容都加载良好:

imports:
    - { resource: '@MyAwesomeBundle/Resources/config/workflows.yml' }

那么,如何从第三方软件包中自动加载工作流呢?

解决方案非常简单

与在
MyAwesomeExtension::load()
方法中加载配置不同,必须在方法
MyAwesomeExtension::prepend()中加载工作流

这样,我的第三方包就可以加载创建
工作流所需的配置

有关
ConfigComponent
:,可以在Symfony的文档中找到更多信息

class MyAwesomExtension extends Extension implements PrependExtensionInterface
{
    /**
     * {@inheritdoc}
     */
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config        = $this->processConfiguration($configuration, $configs);
        $loader        = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
        $loader->load('services.yml');

        ...
    }

    /**
     * ! ! ! LOAD THE WORKFLOW HERE ! ! !
     *
     * @param ContainerBuilder $container
     */
    public function prepend(ContainerBuilder $container)
    {
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
        $loader->load('workflows.yml');
    }