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');
}