2017-09-30 5 views
0

Workflowコンポーネントを使用するバンドルを作成しています。Symfony:サードパーティバンドルからワークフロー設定をロードする方法

ファイル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 

何もありません。

しかし、これは私に、このエラーを返します:だから

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

:私は手動で私のconfig.ymlファイル、私のアプリの一つで直接ファイルをインポートする場合

An error occurred when executing the "'cache:clear --no-warmup'" command:

[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 

はもちろん、すべてがうまくロードされていますサードパーティのバンドルからワークフローを自動的にロードするにはどうすればよいですか?

答えて

0

解決策は本当に簡単です。

代わりMyAwesomeExtension::load()方法でコンフィギュレーションをロードするのは、workflowは方法MyAwesomeExtension::prepend()にロードする必要があります。

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

私のサードパーティのバンドルはworkflowを作成するために必要な設定をロードすることができますこの方法を。

さらに詳しい情報は、ConfigComponentに関するsymfonyのドキュメント:How to simplify configuration of multiple bundlesを参照してください。

関連する問題